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