Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qopengltexturehelper_p.h
Go to the documentation of this file.
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// Qt-Security score:significant reason:default
4
5#ifndef QOPENGLTEXTUREHELPER_P_H
6#define QOPENGLTEXTUREHELPER_P_H
7
8//
9// W A R N I N G
10// -------------
11//
12// This file is not part of the Qt API. It exists purely as an
13// implementation detail. This header file may change from version to
14// version without notice, or even be removed.
15//
16// We mean it.
17//
18
19#include <QtOpenGL/qtopenglglobal.h>
20#include <QtCore/private/qglobal_p.h>
21
22#ifndef QT_NO_OPENGL
23
24#include "qopengl.h"
26#include "qopengltexture.h"
28
30
31// Constants for OpenGL and OpenGL ES 3.0+ which are not available with OpenGL ES 2.0.
33#define GL_TEXTURE_BASE_LEVEL 0x813C
34#endif
36#define GL_TEXTURE_MAX_LEVEL 0x813D
37#endif
38#ifndef GL_TEXTURE_COMPARE_MODE
39#define GL_TEXTURE_COMPARE_MODE 0x884C
40#endif
41#ifndef GL_TEXTURE_COMPARE_FUNC
42#define GL_TEXTURE_COMPARE_FUNC 0x884D
43#endif
44
45// use GL_APICALL only on Android + __clang__
46#if !defined(Q_OS_ANDROID) || !defined(__clang__)
47# undef GL_APICALL
48# define GL_APICALL
49#elif !defined(GL_APICALL)
50# define GL_APICALL
51#endif
52
53class QOpenGLContext;
54
56{
57public:
58 QOpenGLTextureHelper(QOpenGLContext *context);
59
60 // DSA-like API. Will either use real DSA or our emulation
61 inline void glTextureParameteri(GLuint texture, GLenum target, GLenum bindingTarget, GLenum pname, GLint param)
62 {
63 (this->*TextureParameteri)(texture, target, bindingTarget, pname, param);
64 }
65
66 inline void glTextureParameteriv(GLuint texture, GLenum target, GLenum bindingTarget, GLenum pname, const GLint *params)
67 {
68 (this->*TextureParameteriv)(texture, target, bindingTarget, pname, params);
69 }
70
71 inline void glTextureParameterf(GLuint texture, GLenum target, GLenum bindingTarget, GLenum pname, GLfloat param)
72 {
73 (this->*TextureParameterf)(texture, target, bindingTarget, pname, param);
74 }
75
76 inline void glTextureParameterfv(GLuint texture, GLenum target, GLenum bindingTarget, GLenum pname, const GLfloat *params)
77 {
78 (this->*TextureParameterfv)(texture, target, bindingTarget, pname, params);
79 }
80
81 inline void glGenerateTextureMipmap(GLuint texture, GLenum target, GLenum bindingTarget)
82 {
83 (this->*GenerateTextureMipmap)(texture, target, bindingTarget);
84 }
85
86 inline void glTextureStorage3D(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei levels, GLenum internalFormat,
87 GLsizei width, GLsizei height, GLsizei depth)
88 {
89 (this->*TextureStorage3D)(texture, target, bindingTarget, levels, internalFormat, width, height, depth);
90 }
91
92 inline void glTextureStorage2D(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei levels, GLenum internalFormat,
93 GLsizei width, GLsizei height)
94 {
95 (this->*TextureStorage2D)(texture, target, bindingTarget, levels, internalFormat, width, height);
96 }
97
98 inline void glTextureStorage1D(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei levels, GLenum internalFormat,
99 GLsizei width)
100 {
101 (this->*TextureStorage1D)(texture, target, bindingTarget, levels, internalFormat, width);
102 }
103
104 inline void glTextureStorage3DMultisample(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei samples, GLenum internalFormat,
105 GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations)
106 {
107 (this->*TextureStorage3DMultisample)(texture, target, bindingTarget, samples, internalFormat, width, height, depth, fixedSampleLocations);
108 }
109
110 inline void glTextureStorage2DMultisample(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei samples, GLenum internalFormat,
111 GLsizei width, GLsizei height, GLboolean fixedSampleLocations)
112 {
113 (this->*TextureStorage2DMultisample)(texture, target, bindingTarget, samples, internalFormat, width, height, fixedSampleLocations);
114 }
115
116 inline void glTextureImage3D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLenum internalFormat,
117 GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels)
118 {
119 (this->*TextureImage3D)(texture, target, bindingTarget, level, internalFormat, width, height, depth, border, format, type, pixels);
120 }
121
122 inline void glTextureImage2D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLenum internalFormat,
123 GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels)
124 {
125 (this->*TextureImage2D)(texture, target, bindingTarget, level, internalFormat, width, height, border, format, type, pixels);
126 }
127
128 inline void glTextureImage1D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLenum internalFormat,
129 GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels)
130 {
131 (this->*TextureImage1D)(texture, target, bindingTarget, level, internalFormat, width, border, format, type, pixels);
132 }
133
134 inline void glTextureSubImage3D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLint xoffset, GLint yoffset, GLint zoffset,
135 GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type,
136 const GLvoid *pixels, const QOpenGLPixelTransferOptions * const options = nullptr)
137 {
138 if (options) {
139 QOpenGLPixelTransferOptions oldOptions = savePixelUploadOptions();
141 (this->*TextureSubImage3D)(texture, target, bindingTarget, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels);
142 setPixelUploadOptions(oldOptions);
143 } else {
144 (this->*TextureSubImage3D)(texture, target, bindingTarget, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels);
145 }
146 }
147
148 inline void glTextureSubImage2D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLint xoffset, GLint yoffset,
149 GLsizei width, GLsizei height, GLenum format, GLenum type,
150 const GLvoid *pixels, const QOpenGLPixelTransferOptions * const options = nullptr)
151 {
152 if (options) {
153 QOpenGLPixelTransferOptions oldOptions = savePixelUploadOptions();
155 (this->*TextureSubImage2D)(texture, target, bindingTarget, level, xoffset, yoffset, width, height, format, type, pixels);
156 setPixelUploadOptions(oldOptions);
157 } else {
158 (this->*TextureSubImage2D)(texture, target, bindingTarget, level, xoffset, yoffset, width, height, format, type, pixels);
159 }
160 }
161
162 inline void glTextureSubImage1D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLint xoffset,
163 GLsizei width, GLenum format, GLenum type,
164 const GLvoid *pixels, const QOpenGLPixelTransferOptions * const options = nullptr)
165 {
166 if (options) {
167 QOpenGLPixelTransferOptions oldOptions = savePixelUploadOptions();
169 (this->*TextureSubImage1D)(texture, target, bindingTarget, level, xoffset, width, format, type, pixels);
170 setPixelUploadOptions(oldOptions);
171 } else {
172 (this->*TextureSubImage1D)(texture, target, bindingTarget, level, xoffset, width, format, type, pixels);
173 }
174 }
175
176 inline void glTextureImage3DMultisample(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei samples, GLint internalFormat,
177 GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations)
178 {
179 (this->*TextureImage3DMultisample)(texture, target, bindingTarget, samples, internalFormat, width, height, depth, fixedSampleLocations);
180 }
181
182 inline void glTextureImage2DMultisample(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei samples, GLint internalFormat,
183 GLsizei width, GLsizei height, GLboolean fixedSampleLocations)
184 {
185 (this->*TextureImage2DMultisample)(texture, target, bindingTarget, samples, internalFormat, width, height, fixedSampleLocations);
186 }
187
188 inline void glCompressedTextureSubImage1D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level,
189 GLint xoffset, GLsizei width,
190 GLenum format, GLsizei imageSize, const GLvoid *bits,
191 const QOpenGLPixelTransferOptions * const options = nullptr)
192 {
193 if (options) {
194 QOpenGLPixelTransferOptions oldOptions = savePixelUploadOptions();
196 (this->*CompressedTextureSubImage1D)(texture, target, bindingTarget, level, xoffset, width, format, imageSize, bits);
197 setPixelUploadOptions(oldOptions);
198 } else {
199 (this->*CompressedTextureSubImage1D)(texture, target, bindingTarget, level, xoffset, width, format, imageSize, bits);
200 }
201 }
202
203 inline void glCompressedTextureSubImage2D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level,
204 GLint xoffset, GLint yoffset,
205 GLsizei width, GLsizei height,
206 GLenum format, GLsizei imageSize, const GLvoid *bits,
207 const QOpenGLPixelTransferOptions * const options = nullptr)
208 {
209 if (options) {
210 QOpenGLPixelTransferOptions oldOptions = savePixelUploadOptions();
212 (this->*CompressedTextureSubImage2D)(texture, target, bindingTarget, level, xoffset, yoffset, width, height, format, imageSize, bits);
213 setPixelUploadOptions(oldOptions);
214 } else {
215 (this->*CompressedTextureSubImage2D)(texture, target, bindingTarget, level, xoffset, yoffset, width, height, format, imageSize, bits);
216 }
217 }
218
219 inline void glCompressedTextureSubImage3D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level,
220 GLint xoffset, GLint yoffset, GLint zoffset,
221 GLsizei width, GLsizei height, GLsizei depth,
222 GLenum format, GLsizei imageSize, const GLvoid *bits,
223 const QOpenGLPixelTransferOptions * const options = nullptr)
224 {
225 if (options) {
226 QOpenGLPixelTransferOptions oldOptions = savePixelUploadOptions();
228 (this->*CompressedTextureSubImage3D)(texture, target, bindingTarget, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, bits);
229 setPixelUploadOptions(oldOptions);
230 } else {
231 (this->*CompressedTextureSubImage3D)(texture, target, bindingTarget, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, bits);
232 }
233 }
234
235 inline void glCompressedTextureImage1D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level,
236 GLenum internalFormat, GLsizei width,
237 GLint border, GLsizei imageSize, const GLvoid *bits,
238 const QOpenGLPixelTransferOptions * const options = nullptr)
239 {
240 if (options) {
241 QOpenGLPixelTransferOptions oldOptions = savePixelUploadOptions();
243 (this->*CompressedTextureImage1D)(texture, target, bindingTarget, level, internalFormat, width, border, imageSize, bits);
244 setPixelUploadOptions(oldOptions);
245 } else {
246 (this->*CompressedTextureImage1D)(texture, target, bindingTarget, level, internalFormat, width, border, imageSize, bits);
247 }
248 }
249
250 inline void glCompressedTextureImage2D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level,
251 GLenum internalFormat, GLsizei width, GLsizei height,
252 GLint border, GLsizei imageSize, const GLvoid *bits,
253 const QOpenGLPixelTransferOptions * const options = nullptr)
254
255 {
256 if (options) {
257 QOpenGLPixelTransferOptions oldOptions = savePixelUploadOptions();
259 (this->*CompressedTextureImage2D)(texture, target, bindingTarget, level, internalFormat, width, height, border, imageSize, bits);
260 setPixelUploadOptions(oldOptions);
261 } else {
262 (this->*CompressedTextureImage2D)(texture, target, bindingTarget, level, internalFormat, width, height, border, imageSize, bits);
263 }
264 }
265
266 inline void glCompressedTextureImage3D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level,
267 GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth,
268 GLint border, GLsizei imageSize, const GLvoid *bits,
269 const QOpenGLPixelTransferOptions * const options = nullptr)
270 {
271 if (options) {
272 QOpenGLPixelTransferOptions oldOptions = savePixelUploadOptions();
274 (this->*CompressedTextureImage3D)(texture, target, bindingTarget, level, internalFormat, width, height, depth, border, imageSize, bits);
275 setPixelUploadOptions(oldOptions);
276 } else {
277 (this->*CompressedTextureImage3D)(texture, target, bindingTarget, level, internalFormat, width, height, depth, border, imageSize, bits);
278 }
279 }
280
281private:
282 // DSA wrapper (so we can use pointer to member function as switch)
283 void dsa_TextureParameteri(GLuint texture, GLenum target, GLenum bindingTarget, GLenum pname, GLint param);
284
285 void dsa_TextureParameteriv(GLuint texture, GLenum target, GLenum bindingTarget, GLenum pname, const GLint *params);
286
287 void dsa_TextureParameterf(GLuint texture, GLenum target, GLenum bindingTarget, GLenum pname, GLfloat param);
288
289 void dsa_TextureParameterfv(GLuint texture, GLenum target, GLenum bindingTarget, GLenum pname, const GLfloat *params);
290
291 void dsa_GenerateTextureMipmap(GLuint texture, GLenum target, GLenum bindingTarget);
292
293 void dsa_TextureStorage3D(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei levels, GLenum internalFormat,
294 GLsizei width, GLsizei height, GLsizei depth);
295
296 void dsa_TextureStorage2D(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei levels, GLenum internalFormat,
297 GLsizei width, GLsizei height);
298
299 void dsa_TextureStorage1D(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei levels, GLenum internalFormat,
300 GLsizei width);
301
302 void dsa_TextureStorage3DMultisample(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei samples, GLenum internalFormat,
303 GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations);
304
305 void dsa_TextureStorage2DMultisample(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei samples, GLenum internalFormat,
306 GLsizei width, GLsizei height, GLboolean fixedSampleLocations);
307
308 void dsa_TextureImage3D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLenum internalFormat,
309 GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
310
311 void dsa_TextureImage2D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLenum internalFormat,
312 GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
313
314 void dsa_TextureImage1D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLenum internalFormat,
315 GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
316
317 void dsa_TextureSubImage3D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLint xoffset, GLint yoffset, GLint zoffset,
318 GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels);
319
320 void dsa_TextureSubImage2D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLint xoffset, GLint yoffset,
321 GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels);
322
323 void dsa_TextureSubImage1D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLint xoffset,
324 GLsizei width, GLenum format, GLenum type, const GLvoid *pixels);
325
326 void dsa_TextureImage3DMultisample(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei samples, GLint internalFormat,
327 GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations);
328
329 void dsa_TextureImage2DMultisample(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei samples, GLint internalFormat,
330 GLsizei width, GLsizei height, GLboolean fixedSampleLocations);
331
332 void dsa_CompressedTextureSubImage1D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level,
333 GLint xoffset, GLsizei width,
334 GLenum format, GLsizei imageSize, const GLvoid *bits);
335
336 void dsa_CompressedTextureSubImage2D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level,
337 GLint xoffset, GLint yoffset,
338 GLsizei width, GLsizei height,
339 GLenum format, GLsizei imageSize, const GLvoid *bits);
340
341 void dsa_CompressedTextureSubImage3D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level,
342 GLint xoffset, GLint yoffset, GLint zoffset,
343 GLsizei width, GLsizei height, GLsizei depth,
344 GLenum format, GLsizei imageSize, const GLvoid *bits);
345
346 void dsa_CompressedTextureImage1D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level,
347 GLenum internalFormat, GLsizei width,
348 GLint border, GLsizei imageSize, const GLvoid *bits);
349
350 void dsa_CompressedTextureImage2D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level,
351 GLenum internalFormat, GLsizei width, GLsizei height,
352 GLint border, GLsizei imageSize, const GLvoid *bits);
353
354 void dsa_CompressedTextureImage3D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level,
355 GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth,
356 GLint border, GLsizei imageSize, const GLvoid *bits);
357
358 // DSA emulation API
359 void qt_TextureParameteri(GLuint texture, GLenum target, GLenum bindingTarget, GLenum pname, GLint param);
360
361 void qt_TextureParameteriv(GLuint texture, GLenum target, GLenum bindingTarget, GLenum pname, const GLint *params);
362
363 void qt_TextureParameterf(GLuint texture, GLenum target, GLenum bindingTarget, GLenum pname, GLfloat param);
364
365 void qt_TextureParameterfv(GLuint texture, GLenum target, GLenum bindingTarget, GLenum pname, const GLfloat *params);
366
367 void qt_GenerateTextureMipmap(GLuint texture, GLenum target, GLenum bindingTarget);
368
369 void qt_TextureStorage3D(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei levels,
370 GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth);
371
372 void qt_TextureStorage2D(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei levels,
373 GLenum internalFormat, GLsizei width, GLsizei height);
374
375 void qt_TextureStorage1D(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei levels,
376 GLenum internalFormat, GLsizei width);
377
378 void qt_TextureStorage3DMultisample(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei samples,
379 GLenum internalFormat, GLsizei width, GLsizei height,
380 GLsizei depth, GLboolean fixedSampleLocations);
381
382 void qt_TextureStorage2DMultisample(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei samples,
383 GLenum internalFormat, GLsizei width, GLsizei height,
384 GLboolean fixedSampleLocations);
385
386 void qt_TextureImage3D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLenum internalFormat,
387 GLsizei width, GLsizei height, GLsizei depth,
388 GLint border, GLenum format, GLenum type,
389 const GLvoid *pixels);
390
391 void qt_TextureImage2D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLenum internalFormat,
392 GLsizei width, GLsizei height,
393 GLint border, GLenum format, GLenum type,
394 const GLvoid *pixels);
395
396 void qt_TextureImage1D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLenum internalFormat,
397 GLsizei width, GLint border, GLenum format, GLenum type,
398 const GLvoid *pixels);
399
400 void qt_TextureSubImage3D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level,
401 GLint xoffset, GLint yoffset, GLint zoffset,
402 GLsizei width, GLsizei height, GLsizei depth,
403 GLenum format, GLenum type, const GLvoid *pixels);
404
405 void qt_TextureSubImage2D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level,
406 GLint xoffset, GLint yoffset,
407 GLsizei width, GLsizei height,
408 GLenum format, GLenum type, const GLvoid *pixels);
409
410 void qt_TextureSubImage1D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level,
411 GLint xoffset, GLsizei width,
412 GLenum format, GLenum type, const GLvoid *pixels);
413
414 void qt_TextureImage3DMultisample(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei samples,
415 GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth,
416 GLboolean fixedSampleLocations);
417
418 void qt_TextureImage2DMultisample(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei samples,
419 GLint internalFormat, GLsizei width, GLsizei height,
420 GLboolean fixedSampleLocations);
421
422 void qt_CompressedTextureSubImage1D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level,
423 GLint xoffset, GLsizei width, GLenum format,
424 GLsizei imageSize, const GLvoid *bits);
425
426 void qt_CompressedTextureSubImage2D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level,
427 GLint xoffset, GLint yoffset,
428 GLsizei width, GLsizei height,
429 GLenum format, GLsizei imageSize, const GLvoid *bits);
430
431 void qt_CompressedTextureSubImage3D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level,
432 GLint xoffset, GLint yoffset, GLint zoffset,
433 GLsizei width, GLsizei height, GLsizei depth,
434 GLenum format, GLsizei imageSize, const GLvoid *bits);
435
436 void qt_CompressedTextureImage1D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLenum internalFormat,
437 GLsizei width, GLint border,
438 GLsizei imageSize, const GLvoid *bits);
439
440 void qt_CompressedTextureImage2D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLenum internalFormat,
441 GLsizei width, GLsizei height, GLint border,
442 GLsizei imageSize, const GLvoid *bits);
443
444 void qt_CompressedTextureImage3D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLenum internalFormat,
445 GLsizei width, GLsizei height, GLsizei depth, GLint border,
446 GLsizei imageSize, const GLvoid *bits);
447
448public:
449 // Raw OpenGL functions, resolved and used by our DSA-like static functions if no EXT_direct_state_access is available
450
451 // OpenGL 1.0
452 inline void glTexImage1D(GLenum target, GLint level, GLint internalFormat,
453 GLsizei width, GLint border,
454 GLenum format, GLenum type, const GLvoid *pixels)
455 {
456 TexImage1D(target, level, internalFormat, width, border, format, type, pixels);
457 }
458
459 // OpenGL 1.1
460 inline void glTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLsizei width,
461 GLenum format, GLenum type, const GLvoid *pixels)
462 {
463 TexSubImage1D(target, level, xoffset, width, format, type, pixels);
464 }
465
466 // OpenGL 1.2
467 inline void glTexImage3D(GLenum target, GLint level, GLint internalFormat,
468 GLsizei width, GLsizei height, GLsizei depth, GLint border,
469 GLenum format, GLenum type, const GLvoid *pixels)
470 {
471 TexImage3D(target, level, internalFormat, width, height, depth, border, format, type, pixels);
472 }
473
474 inline void glTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset,
475 GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels)
476 {
477 TexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels);
478 }
479
480 // OpenGL 1.3
481 inline void glGetCompressedTexImage(GLenum target, GLint level, GLvoid *img)
482 {
483 GetCompressedTexImage(target, level, img);
484 }
485
486 inline void glCompressedTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLsizei width,
487 GLenum format, GLsizei imageSize, const GLvoid *data)
488 {
489 CompressedTexSubImage1D(target, level, xoffset, width, format, imageSize, data);
490 }
491
492 inline void glCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
493 GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data)
494 {
495 CompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data);
496 }
497
498 inline void glCompressedTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset,
499 GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data)
500 {
501 CompressedTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data);
502 }
503
504 inline void glCompressedTexImage1D(GLenum target, GLint level, GLenum internalFormat, GLsizei width,
505 GLint border, GLsizei imageSize, const GLvoid *data)
506 {
507 CompressedTexImage1D(target, level, internalFormat, width, border, imageSize, data);
508 }
509
510 inline void glCompressedTexImage2D(GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height,
511 GLint border, GLsizei imageSize, const GLvoid *data)
512 {
513 CompressedTexImage2D(target, level, internalFormat, width, height, border, imageSize, data);
514 }
515
516 inline void glCompressedTexImage3D(GLenum target, GLint level, GLenum internalFormat,
517 GLsizei width, GLsizei height, GLsizei depth,
518 GLint border, GLsizei imageSize, const GLvoid *data)
519 {
520 CompressedTexImage3D(target, level, internalFormat, width, height, depth, border, imageSize, data);
521 }
522
523 inline void glActiveTexture(GLenum texture)
524 {
525 ActiveTexture(texture);
526 }
527
528 // OpenGL 3.0
529 inline void glGenerateMipmap(GLenum target)
530 {
531 GenerateMipmap(target);
532 }
533
534 // OpenGL 3.2
535 inline void glTexImage3DMultisample(GLenum target, GLsizei samples, GLint internalFormat,
536 GLsizei width, GLsizei height, GLsizei depth,
537 GLboolean fixedSampleLocations)
538 {
539 TexImage3DMultisample(target, samples, internalFormat, width, height, depth, fixedSampleLocations);
540 }
541
542 inline void glTexImage2DMultisample(GLenum target, GLsizei samples, GLint internalFormat,
543 GLsizei width, GLsizei height,
544 GLboolean fixedSampleLocations)
545 {
546 TexImage2DMultisample(target, samples, internalFormat, width, height, fixedSampleLocations);
547 }
548
549 // OpenGL 4.2
550 inline void glTexStorage3D(GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth)
551 {
552 TexStorage3D(target, levels, internalFormat, width, height, depth);
553 }
554
555 inline void glTexStorage2D(GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height)
556 {
557 TexStorage2D(target, levels, internalFormat, width, height);
558 }
559
560 inline void glTexStorage1D(GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width)
561 {
562 TexStorage1D(target, levels, internalFormat, width);
563 }
564
565 // OpenGL 4.3
566 inline void glTexStorage3DMultisample(GLenum target, GLsizei samples, GLenum internalFormat,
567 GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations)
568 {
569 TexStorage3DMultisample(target, samples, internalFormat, width, height, depth, fixedSampleLocations);
570 }
571
572 inline void glTexStorage2DMultisample(GLenum target, GLsizei samples, GLenum internalFormat,
573 GLsizei width, GLsizei height, GLboolean fixedSampleLocations)
574 {
575 TexStorage2DMultisample(target, samples, internalFormat, width, height, fixedSampleLocations);
576 }
577
578 inline void glTexBufferRange(GLenum target, GLenum internalFormat, GLuint buffer,
579 GLintptr offset, GLsizeiptr size)
580 {
581 TexBufferRange(target, internalFormat, buffer, offset, size);
582 }
583
584 inline void glTextureView(GLuint texture, GLenum target, GLuint origTexture, GLenum internalFormat,
585 GLuint minLevel, GLuint numLevels, GLuint minLayer, GLuint numLayers)
586 {
587 TextureView(texture, target, origTexture, internalFormat, minLevel, numLevels, minLayer, numLayers);
588 }
589
590 // Helper functions
591 inline QOpenGLPixelTransferOptions savePixelUploadOptions()
592 {
593 QOpenGLPixelTransferOptions options;
594 int val = 0;
595 functions->glGetIntegerv(GL_UNPACK_ALIGNMENT, &val);
596 options.setAlignment(val);
597#if !QT_CONFIG(opengles2)
598 functions->glGetIntegerv(GL_UNPACK_SKIP_IMAGES, &val);
599 options.setSkipImages(val);
600 functions->glGetIntegerv(GL_UNPACK_SKIP_ROWS, &val);
601 options.setSkipRows(val);
602 functions->glGetIntegerv(GL_UNPACK_SKIP_PIXELS, &val);
603 options.setSkipPixels(val);
604 functions->glGetIntegerv(GL_UNPACK_IMAGE_HEIGHT, &val);
605 options.setImageHeight(val);
606 functions->glGetIntegerv(GL_UNPACK_ROW_LENGTH, &val);
607 options.setRowLength(val);
608 GLboolean b = GL_FALSE;
609 functions->glGetBooleanv(GL_UNPACK_LSB_FIRST, &b);
610 options.setLeastSignificantByteFirst(b);
611 functions->glGetBooleanv(GL_UNPACK_SWAP_BYTES, &b);
612 options.setSwapBytesEnabled(b);
613#endif
614 return options;
615 }
616
617 inline void setPixelUploadOptions(const QOpenGLPixelTransferOptions &options)
618 {
619 functions->glPixelStorei(GL_UNPACK_ALIGNMENT, options.alignment());
620#if !QT_CONFIG(opengles2)
621 functions->glPixelStorei(GL_UNPACK_SKIP_IMAGES, options.skipImages());
622 functions->glPixelStorei(GL_UNPACK_SKIP_ROWS, options.skipRows());
623 functions->glPixelStorei(GL_UNPACK_SKIP_PIXELS, options.skipPixels());
624 functions->glPixelStorei(GL_UNPACK_IMAGE_HEIGHT, options.imageHeight());
625 functions->glPixelStorei(GL_UNPACK_ROW_LENGTH, options.rowLength());
626 functions->glPixelStorei(GL_UNPACK_LSB_FIRST, options.isLeastSignificantBitFirst());
627 functions->glPixelStorei(GL_UNPACK_SWAP_BYTES, options.isSwapBytesEnabled());
628#endif
629 }
630
631 QOpenGLFunctions *functions;
632private:
633 // Typedefs and pointers to member functions used to switch between EXT_direct_state_access and our own emulated DSA.
634 // The argument match the corresponding GL function, but there's an extra "GLenum bindingTarget" which gets used with
635 // the DSA emulation -- it contains the right GL_BINDING_TEXTURE_X to use.
636 typedef void (QOpenGLTextureHelper::*TextureParameteriMemberFunc)(GLuint texture, GLenum target, GLenum bindingTarget, GLenum pname, GLint param);
637 typedef void (QOpenGLTextureHelper::*TextureParameterivMemberFunc)(GLuint texture, GLenum target, GLenum bindingTarget, GLenum pname, const GLint *params);
638 typedef void (QOpenGLTextureHelper::*TextureParameterfMemberFunc)(GLuint texture, GLenum target, GLenum bindingTarget, GLenum pname, GLfloat param);
639 typedef void (QOpenGLTextureHelper::*TextureParameterfvMemberFunc)(GLuint texture, GLenum target, GLenum bindingTarget, GLenum pname, const GLfloat *params);
640 typedef void (QOpenGLTextureHelper::*GenerateTextureMipmapMemberFunc)(GLuint texture, GLenum target, GLenum bindingTarget);
641 typedef void (QOpenGLTextureHelper::*TextureStorage3DMemberFunc)(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth);
642 typedef void (QOpenGLTextureHelper::*TextureStorage2DMemberFunc)(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height);
643 typedef void (QOpenGLTextureHelper::*TextureStorage1DMemberFunc)(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei levels, GLenum internalFormat, GLsizei width);
644 typedef void (QOpenGLTextureHelper::*TextureStorage3DMultisampleMemberFunc)(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations);
645 typedef void (QOpenGLTextureHelper::*TextureStorage2DMultisampleMemberFunc)(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations);
646 typedef void (QOpenGLTextureHelper::*TextureImage3DMemberFunc)(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
647 typedef void (QOpenGLTextureHelper::*TextureImage2DMemberFunc)(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
648 typedef void (QOpenGLTextureHelper::*TextureImage1DMemberFunc)(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLenum internalFormat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
649 typedef void (QOpenGLTextureHelper::*TextureSubImage3DMemberFunc)(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels);
650 typedef void (QOpenGLTextureHelper::*TextureSubImage2DMemberFunc)(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels);
651 typedef void (QOpenGLTextureHelper::*TextureSubImage1DMemberFunc)(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels);
652 typedef void (QOpenGLTextureHelper::*TextureImage3DMultisampleMemberFunc)(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations);
653 typedef void (QOpenGLTextureHelper::*TextureImage2DMultisampleMemberFunc)(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations);
654 typedef void (QOpenGLTextureHelper::*CompressedTextureSubImage1DMemberFunc)(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *bits);
655 typedef void (QOpenGLTextureHelper::*CompressedTextureSubImage2DMemberFunc)(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *bits);
656 typedef void (QOpenGLTextureHelper::*CompressedTextureSubImage3DMemberFunc)(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *bits);
657 typedef void (QOpenGLTextureHelper::*CompressedTextureImage1DMemberFunc)(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *bits);
658 typedef void (QOpenGLTextureHelper::*CompressedTextureImage2DMemberFunc)(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *bits);
659 typedef void (QOpenGLTextureHelper::*CompressedTextureImage3DMemberFunc)(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *bits);
660
661
662 TextureParameteriMemberFunc TextureParameteri;
663 TextureParameterivMemberFunc TextureParameteriv;
664 TextureParameterfMemberFunc TextureParameterf;
665 TextureParameterfvMemberFunc TextureParameterfv;
666 GenerateTextureMipmapMemberFunc GenerateTextureMipmap;
667 TextureStorage3DMemberFunc TextureStorage3D;
668 TextureStorage2DMemberFunc TextureStorage2D;
669 TextureStorage1DMemberFunc TextureStorage1D;
670 TextureStorage3DMultisampleMemberFunc TextureStorage3DMultisample;
671 TextureStorage2DMultisampleMemberFunc TextureStorage2DMultisample;
672 TextureImage3DMemberFunc TextureImage3D;
673 TextureImage2DMemberFunc TextureImage2D;
674 TextureImage1DMemberFunc TextureImage1D;
675 TextureSubImage3DMemberFunc TextureSubImage3D;
676 TextureSubImage2DMemberFunc TextureSubImage2D;
677 TextureSubImage1DMemberFunc TextureSubImage1D;
678 TextureImage3DMultisampleMemberFunc TextureImage3DMultisample;
679 TextureImage2DMultisampleMemberFunc TextureImage2DMultisample;
680 CompressedTextureSubImage1DMemberFunc CompressedTextureSubImage1D;
681 CompressedTextureSubImage2DMemberFunc CompressedTextureSubImage2D;
682 CompressedTextureSubImage3DMemberFunc CompressedTextureSubImage3D;
683 CompressedTextureImage1DMemberFunc CompressedTextureImage1D;
684 CompressedTextureImage2DMemberFunc CompressedTextureImage2D;
685 CompressedTextureImage3DMemberFunc CompressedTextureImage3D;
686
687 // Raw function pointers for core and DSA functions
688
689 // EXT_direct_state_access used when DSA is available
690 void (QOPENGLF_APIENTRYP TextureParameteriEXT)(GLuint texture, GLenum target, GLenum pname, GLint param);
691 void (QOPENGLF_APIENTRYP TextureParameterivEXT)(GLuint texture, GLenum target, GLenum pname, const GLint *params);
692 void (QOPENGLF_APIENTRYP TextureParameterfEXT)(GLuint texture, GLenum target, GLenum pname, GLfloat param);
693 void (QOPENGLF_APIENTRYP TextureParameterfvEXT)(GLuint texture, GLenum target, GLenum pname, const GLfloat *params);
694 void (QOPENGLF_APIENTRYP GenerateTextureMipmapEXT)(GLuint texture, GLenum target);
695 void (QOPENGLF_APIENTRYP TextureStorage3DEXT)(GLuint texture, GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth);
696 void (QOPENGLF_APIENTRYP TextureStorage2DEXT)(GLuint texture, GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height);
697 void (QOPENGLF_APIENTRYP TextureStorage1DEXT)(GLuint texture, GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width);
698 void (QOPENGLF_APIENTRYP TextureStorage3DMultisampleEXT)(GLuint texture, GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations);
699 void (QOPENGLF_APIENTRYP TextureStorage2DMultisampleEXT)(GLuint texture, GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations);
700 void (QOPENGLF_APIENTRYP TextureImage3DEXT)(GLuint texture, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
701 void (QOPENGLF_APIENTRYP TextureImage2DEXT)(GLuint texture, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
702 void (QOPENGLF_APIENTRYP TextureImage1DEXT)(GLuint texture, GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
703 void (QOPENGLF_APIENTRYP TextureSubImage3DEXT)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels);
704 void (QOPENGLF_APIENTRYP TextureSubImage2DEXT)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels);
705 void (QOPENGLF_APIENTRYP TextureSubImage1DEXT)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels);
706 void (QOPENGLF_APIENTRYP CompressedTextureSubImage1DEXT)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *bits);
707 void (QOPENGLF_APIENTRYP CompressedTextureSubImage2DEXT)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *bits);
708 void (QOPENGLF_APIENTRYP CompressedTextureSubImage3DEXT)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *bits);
709 void (QOPENGLF_APIENTRYP CompressedTextureImage1DEXT)(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *bits);
710 void (QOPENGLF_APIENTRYP CompressedTextureImage2DEXT)(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *bits);
711 void (QOPENGLF_APIENTRYP CompressedTextureImage3DEXT)(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *bits);
712
713
714 // Plus some missing ones that are in the NV_texture_multisample extension instead
715 void (QOPENGLF_APIENTRYP TextureImage3DMultisampleNV)(GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations);
716 void (QOPENGLF_APIENTRYP TextureImage2DMultisampleNV)(GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations);
717
718 // OpenGL 1.0
719 void (QOPENGLF_APIENTRYP TexImage1D)(GLenum target, GLint level, GLint internalFormat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
720
721 // OpenGL 1.1
722 void (QOPENGLF_APIENTRYP TexSubImage1D)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels);
723
724 // OpenGL 1.2
725 void (QOPENGLF_APIENTRYP TexImage3D)(GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
726 void (QOPENGLF_APIENTRYP TexSubImage3D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels);
727
728 // OpenGL 1.3
729 void (QOPENGLF_APIENTRYP GetCompressedTexImage)(GLenum target, GLint level, GLvoid *img);
730 void (QOPENGLF_APIENTRYP CompressedTexSubImage1D)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data);
731 GL_APICALL void (QOPENGLF_APIENTRYP CompressedTexSubImage2D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data);
732 void (QOPENGLF_APIENTRYP CompressedTexSubImage3D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data);
733 void (QOPENGLF_APIENTRYP CompressedTexImage1D)(GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data);
734 GL_APICALL void (QOPENGLF_APIENTRYP CompressedTexImage2D)(GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data);
735 void (QOPENGLF_APIENTRYP CompressedTexImage3D)(GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data);
736 GL_APICALL void (QOPENGLF_APIENTRYP ActiveTexture)(GLenum texture);
737
738 // OpenGL 3.0
739 GL_APICALL void (QOPENGLF_APIENTRYP GenerateMipmap)(GLenum target);
740
741 // OpenGL 3.2
742 void (QOPENGLF_APIENTRYP TexImage3DMultisample)(GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations);
743 void (QOPENGLF_APIENTRYP TexImage2DMultisample)(GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations);
744
745 // OpenGL 4.2
746 void (QOPENGLF_APIENTRYP TexStorage3D)(GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth);
747 void (QOPENGLF_APIENTRYP TexStorage2D)(GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height);
748 void (QOPENGLF_APIENTRYP TexStorage1D)(GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width);
749
750 // OpenGL 4.3
751 void (QOPENGLF_APIENTRYP TexStorage3DMultisample)(GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations);
752 void (QOPENGLF_APIENTRYP TexStorage2DMultisample)(GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations);
753 void (QOPENGLF_APIENTRYP TexBufferRange)(GLenum target, GLenum internalFormat, GLuint buffer, GLintptr offset, GLsizeiptr size);
754 void (QOPENGLF_APIENTRYP TextureView)(GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers);
755};
756
757QT_END_NAMESPACE
758
759#undef Q_CALL_MEMBER_FUNCTION
760
761#endif // QT_NO_OPENGL
762
763#endif // QOPENGLTEXTUREHELPER_P_H
void setPixelUploadOptions(const QOpenGLPixelTransferOptions &options)
QOpenGLPixelTransferOptions savePixelUploadOptions()
QOpenGLTextureHelper(QOpenGLContext *context)
void setWrapMode(QOpenGLTexture::CoordinateDirection direction, QOpenGLTexture::WrapMode mode)
void allocateStorage(QOpenGLTexture::PixelFormat pixelFormat, QOpenGLTexture::PixelType pixelType)
void setData(int xOffset, int yOffset, int zOffset, int width, int height, int depth, int mipLevel, int layer, int layerCount, QOpenGLTexture::CubeMapFace cubeFace, QOpenGLTexture::PixelFormat sourceFormat, QOpenGLTexture::PixelType sourceType, const void *data, const QOpenGLPixelTransferOptions *const options)
void setData(int mipLevel, int layer, int layerCount, QOpenGLTexture::CubeMapFace cubeFace, QOpenGLTexture::PixelFormat sourceFormat, QOpenGLTexture::PixelType sourceType, const void *data, const QOpenGLPixelTransferOptions *const options)
QOpenGLFunctions * functions
bool isUsingImmutableStorage() const
QOpenGLTexturePrivate(QOpenGLTexture::Target textureTarget, QOpenGLTexture *qq)
void allocateMutableStorage(QOpenGLTexture::PixelFormat pixelFormat, QOpenGLTexture::PixelType pixelType)
void setWrapMode(QOpenGLTexture::WrapMode mode)
int maximumMipLevelCount() const
void release(uint unit, QOpenGLTexture::TextureUnitReset reset=QOpenGLTexture::DontResetTextureUnit)
QOpenGLTexture * createTextureView(QOpenGLTexture::Target target, QOpenGLTexture::TextureFormat viewFormat, int minimumMipmapLevel, int maximumMipmapLevel, int minimumLayer, int maximumLayer) const
bool isBound(uint unit) const
void bind(uint unit, QOpenGLTexture::TextureUnitReset reset=QOpenGLTexture::DontResetTextureUnit)
void setCompressedData(int mipLevel, int layer, int layerCount, QOpenGLTexture::CubeMapFace cubeFace, int dataSize, const void *data, const QOpenGLPixelTransferOptions *const options)
static int mipLevelSize(int mipLevel, int baseLevelSize)
QOpenGLTextureHelper * texFuncs
QOpenGLContext * context
\inmodule QtGui
Combined button and popup list for selecting options.
#define QOPENGLF_APIENTRYP
Definition qopengl.h:275
#define GL_TEXTURE_COMPARE_FUNC
Definition qopenglext.h:338
#define GL_TEXTURE0
Definition qopenglext.h:129
#define GL_TEXTURE_WRAP_R
Definition qopenglext.h:87
#define GL_TEXTURE_BASE_LEVEL
Definition qopenglext.h:103
#define GL_TEXTURE_MAX_LEVEL
Definition qopenglext.h:104
#define GL_ACTIVE_TEXTURE
Definition qopenglext.h:161
#define GL_TEXTURE_COMPARE_MODE
Definition qopenglext.h:337
static QOpenGLTexture::PixelFormat pixelFormatCompatibleWithInternalFormat(QOpenGLTexture::TextureFormat internalFormat)
static QOpenGLTexture::PixelType pixelTypeCompatibleWithInternalFormat(QOpenGLTexture::TextureFormat internalFormat)
static bool isNpot(int width, int height=1, int depth=1)
static bool isCompressedFormat(QOpenGLTexture::TextureFormat internalFormat)
static bool isTextureTargetMultisample(QOpenGLTexture::Target target)
static bool isSizedTextureFormat(QOpenGLTexture::TextureFormat internalFormat)
#define GL_APICALL