1// Copyright (C) 2013 Klaralvdalens Datakonsult AB (KDAB).
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#include "qopenglpixeltransferoptions.h"
5#include <QSharedData>
6
7QT_BEGIN_NAMESPACE
8
9/*!
10 * \class QOpenGLPixelTransferOptions
11 * \inmodule QtOpenGL
12 *
13 * \brief The QOpenGLPixelTransferOptions class describes the pixel storage
14 * modes that affect the unpacking of pixels during texture upload.
15 */
16
17/*!
18 * \fn QOpenGLPixelTransferOptions & QOpenGLPixelTransferOptions::operator=(QOpenGLPixelTransferOptions &&other)
19 * \internal
20 */
21
22/*!
23 * \fn void QOpenGLPixelTransferOptions::swap(QOpenGLPixelTransferOptions &other)
24 * \internal
25 */
26
27class QOpenGLPixelTransferOptionsData : public QSharedData
28{
29public:
30 QOpenGLPixelTransferOptionsData()
31 : alignment(4)
32 , skipImages(0)
33 , skipRows(0)
34 , skipPixels(0)
35 , imageHeight(0)
36 , rowLength(0)
37 , lsbFirst(false)
38 , swapBytes(false)
39 {}
40
41 int alignment;
42 int skipImages;
43 int skipRows;
44 int skipPixels;
45 int imageHeight;
46 int rowLength;
47 bool lsbFirst;
48 bool swapBytes;
49};
50
51/*!
52 * Constructs a new QOpenGLPixelTransferOptions instance with the default settings.
53 */
54QOpenGLPixelTransferOptions::QOpenGLPixelTransferOptions()
55 : data(new QOpenGLPixelTransferOptionsData)
56{
57}
58
59/*!
60 * \internal
61 */
62QOpenGLPixelTransferOptions::QOpenGLPixelTransferOptions(const QOpenGLPixelTransferOptions &rhs)
63 : data(rhs.data)
64{
65}
66
67/*!
68 * \internal
69 */
70QOpenGLPixelTransferOptions &QOpenGLPixelTransferOptions::operator=(const QOpenGLPixelTransferOptions &rhs)
71{
72 if (this != &rhs)
73 data.operator=(o: rhs.data);
74 return *this;
75}
76
77/*!
78 * Destructor.
79 */
80QOpenGLPixelTransferOptions::~QOpenGLPixelTransferOptions()
81{
82}
83
84/*!
85 * Sets the \a alignment requirements for each pixel row. Corresponds to \c GL_UNPACK_ALIGNMENT.
86 * The default value is 4, as specified by OpenGL.
87 */
88void QOpenGLPixelTransferOptions::setAlignment(int alignment)
89{
90 data->alignment = alignment;
91}
92
93/*!
94 * \return the current alignment requirement for each pixel row.
95 */
96int QOpenGLPixelTransferOptions::alignment() const
97{
98 return data->alignment;
99}
100
101/*!
102 * Sets the number of images that are skipped to \a skipImages.
103 * Corresponds to \c GL_UNPACK_SKIP_IMAGES. Equivalent to incrementing the pointer
104 * passed to QOpenGLTexture::setData(). The default value is 0.
105 */
106void QOpenGLPixelTransferOptions::setSkipImages(int skipImages)
107{
108 data->skipImages = skipImages;
109}
110
111/*!
112 * \return the number of images that are skipped.
113 */
114int QOpenGLPixelTransferOptions::skipImages() const
115{
116 return data->skipImages;
117}
118
119/*!
120 * Sets the number of rows that are skipped to \a skipRows.
121 * Corresponds to \c GL_UNPACK_SKIP_ROWS. Equivalent to incrementing the pointer
122 * passed to QOpenGLTexture::setData(). The default value is 0.
123 */
124void QOpenGLPixelTransferOptions::setSkipRows(int skipRows)
125{
126 data->skipRows = skipRows;
127}
128
129/*!
130 * \return the number of rows that are skipped.
131 */
132int QOpenGLPixelTransferOptions::skipRows() const
133{
134 return data->skipRows;
135}
136
137/*!
138 * Sets the number of pixels that are skipped to \a skipPixels.
139 * Corresponds to \c GL_UNPACK_SKIP_PIXELS. Equivalent to incrementing the pointer
140 * passed to QOpenGLTexture::setData(). The default value is 0.
141 */
142void QOpenGLPixelTransferOptions::setSkipPixels(int skipPixels)
143{
144 data->skipPixels = skipPixels;
145}
146
147/*!
148 * \return the number of pixels that are skipped.
149 */
150int QOpenGLPixelTransferOptions::skipPixels() const
151{
152 return data->skipPixels;
153}
154
155/*!
156 * Sets the image height for 3D textures to \a imageHeight.
157 * Corresponds to \c GL_UNPACK_IMAGE_HEIGHT.
158 * The default value is 0.
159 */
160void QOpenGLPixelTransferOptions::setImageHeight(int imageHeight)
161{
162 data->imageHeight = imageHeight;
163}
164
165/*!
166 * \return the currently set image height.
167 */
168int QOpenGLPixelTransferOptions::imageHeight() const
169{
170 return data->imageHeight;
171}
172
173/*!
174 * Sets the number of pixels in a row to \a rowLength.
175 * Corresponds to \c GL_UNPACK_ROW_LENGTH.
176 * The default value is 0.
177 */
178void QOpenGLPixelTransferOptions::setRowLength(int rowLength)
179{
180 data->rowLength = rowLength;
181}
182
183/*!
184 * \return the currently set row length.
185 */
186int QOpenGLPixelTransferOptions::rowLength() const
187{
188 return data->rowLength;
189}
190
191/*!
192 * \a lsbFirst specifies if bits within a byte are ordered from least to most significat.
193 * The default value is \c false, meaning that the first bit in each byte is the
194 * most significant one. This is significant for bitmap data only.
195 * Corresponds to \c GL_UNPACK_LSB_FIRST.
196 */
197void QOpenGLPixelTransferOptions::setLeastSignificantByteFirst(bool lsbFirst)
198{
199 data->lsbFirst = lsbFirst;
200}
201
202/*!
203 * \return \c true if bits within a byte are ordered from least to most significant.
204 */
205bool QOpenGLPixelTransferOptions::isLeastSignificantBitFirst() const
206{
207 return data->lsbFirst;
208}
209
210/*!
211 * \a swapBytes specifies if the byte ordering for multibyte components is reversed.
212 * The default value is \c false.
213 * Corresponds to \c GL_UNPACK_SWAP_BYTES.
214 */
215void QOpenGLPixelTransferOptions::setSwapBytesEnabled(bool swapBytes)
216{
217 data->swapBytes = swapBytes;
218}
219
220/*!
221 * \return \c true if the byte ordering for multibyte components is reversed.
222 */
223bool QOpenGLPixelTransferOptions::isSwapBytesEnabled() const
224{
225 return data->swapBytes;
226}
227
228QT_END_NAMESPACE
229

source code of qtbase/src/opengl/qopenglpixeltransferoptions.cpp