diff options
Diffstat (limited to 'src/gui/opengl/qopengltexturehelper.cpp')
-rw-r--r-- | src/gui/opengl/qopengltexturehelper.cpp | 589 |
1 files changed, 0 insertions, 589 deletions
diff --git a/src/gui/opengl/qopengltexturehelper.cpp b/src/gui/opengl/qopengltexturehelper.cpp deleted file mode 100644 index 6709edc4e2..0000000000 --- a/src/gui/opengl/qopengltexturehelper.cpp +++ /dev/null @@ -1,589 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2013 Klaralvdalens Datakonsult AB (KDAB). -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtGui module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qopengltexturehelper_p.h" - -#include <QOpenGLContext> -#include <private/qopenglextensions_p.h> - -QT_BEGIN_NAMESPACE - -QOpenGLTextureHelper::QOpenGLTextureHelper(QOpenGLContext *context) -{ - functions = context->functions(); - // Resolve EXT_direct_state_access entry points if present. - - // However, disable it on some systems where DSA is known to be unreliable. - bool allowDSA = true; - const char *renderer = reinterpret_cast<const char *>(context->functions()->glGetString(GL_RENDERER)); - // QTBUG-40653, QTBUG-44988 - if (renderer && strstr(renderer, "AMD Radeon HD")) - allowDSA = false; - - if (allowDSA && !context->isOpenGLES() - && context->hasExtension(QByteArrayLiteral("GL_EXT_direct_state_access"))) { - TextureParameteriEXT = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , GLenum , GLenum , GLint )>(context->getProcAddress("glTextureParameteriEXT")); - TextureParameterivEXT = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , GLenum , GLenum , const GLint *)>(context->getProcAddress("glTextureParameterivEXT")); - TextureParameterfEXT = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , GLenum , GLenum , GLfloat )>(context->getProcAddress("glTextureParameterfEXT")); - TextureParameterfvEXT = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , GLenum , GLenum , const GLfloat *)>(context->getProcAddress("glTextureParameterfvEXT")); - GenerateTextureMipmapEXT = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , GLenum )>(context->getProcAddress("glGenerateTextureMipmapEXT")); - TextureStorage3DEXT = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , GLenum , GLsizei , GLenum , GLsizei , GLsizei , GLsizei )>(context->getProcAddress("glTextureStorage3DEXT")); - TextureStorage2DEXT = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , GLenum , GLsizei , GLenum , GLsizei , GLsizei )>(context->getProcAddress("glTextureStorage2DEXT")); - TextureStorage1DEXT = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , GLenum , GLsizei , GLenum , GLsizei )>(context->getProcAddress("glTextureStorage1DEXT")); - TextureStorage3DMultisampleEXT = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , GLenum , GLsizei , GLenum , GLsizei , GLsizei , GLsizei , GLboolean )>(context->getProcAddress("glTextureStorage3DMultisampleEXT")); - TextureStorage2DMultisampleEXT = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , GLenum , GLsizei , GLenum , GLsizei , GLsizei , GLboolean )>(context->getProcAddress("glTextureStorage2DMultisampleEXT")); - TextureImage3DEXT = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , GLenum , GLint , GLenum , GLsizei , GLsizei , GLsizei , GLint , GLenum , GLenum , const GLvoid *)>(context->getProcAddress("glTextureImage3DEXT")); - TextureImage2DEXT = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , GLenum , GLint , GLenum , GLsizei , GLsizei , GLint , GLenum , GLenum , const GLvoid *)>(context->getProcAddress("glTextureImage2DEXT")); - TextureImage1DEXT = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , GLenum , GLint , GLenum , GLsizei , GLint , GLenum , GLenum , const GLvoid *)>(context->getProcAddress("glTextureImage1DEXT")); - TextureSubImage3DEXT = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , GLenum , GLint , GLint , GLint , GLint , GLsizei , GLsizei , GLsizei , GLenum , GLenum , const GLvoid *)>(context->getProcAddress("glTextureSubImage3DEXT")); - TextureSubImage2DEXT = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , GLenum , GLint , GLint , GLint , GLsizei , GLsizei , GLenum , GLenum , const GLvoid *)>(context->getProcAddress("glTextureSubImage2DEXT")); - TextureSubImage1DEXT = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , GLenum , GLint , GLint , GLsizei , GLenum , GLenum , const GLvoid *)>(context->getProcAddress("glTextureSubImage1DEXT")); - CompressedTextureSubImage1DEXT = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , GLenum , GLint , GLint , GLsizei , GLenum , GLsizei , const GLvoid *)>(context->getProcAddress("glCompressedTextureSubImage1DEXT")); - CompressedTextureSubImage2DEXT = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , GLenum , GLint , GLint , GLint , GLsizei , GLsizei , GLenum , GLsizei , const GLvoid *)>(context->getProcAddress("glCompressedTextureSubImage2DEXT")); - CompressedTextureSubImage3DEXT = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , GLenum , GLint , GLint , GLint , GLint , GLsizei , GLsizei , GLsizei , GLenum , GLsizei , const GLvoid *)>(context->getProcAddress("glCompressedTextureSubImage3DEXT")); - CompressedTextureImage1DEXT = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , GLenum , GLint , GLenum , GLsizei , GLint , GLsizei , const GLvoid *)>(context->getProcAddress("glCompressedTextureImage1DEXT")); - CompressedTextureImage2DEXT = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , GLenum , GLint , GLenum , GLsizei , GLsizei , GLint , GLsizei , const GLvoid *)>(context->getProcAddress("glCompressedTextureImage2DEXT")); - CompressedTextureImage3DEXT = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , GLenum , GLint , GLenum , GLsizei , GLsizei , GLsizei , GLint , GLsizei , const GLvoid *)>(context->getProcAddress("glCompressedTextureImage3DEXT")); - - // Use the real DSA functions - TextureParameteri = &QOpenGLTextureHelper::dsa_TextureParameteri; - TextureParameteriv = &QOpenGLTextureHelper::dsa_TextureParameteriv; - TextureParameterf = &QOpenGLTextureHelper::dsa_TextureParameterf; - TextureParameterfv = &QOpenGLTextureHelper::dsa_TextureParameterfv; - GenerateTextureMipmap = &QOpenGLTextureHelper::dsa_GenerateTextureMipmap; - TextureStorage3D = &QOpenGLTextureHelper::dsa_TextureStorage3D; - TextureStorage2D = &QOpenGLTextureHelper::dsa_TextureStorage2D; - TextureStorage1D = &QOpenGLTextureHelper::dsa_TextureStorage1D; - TextureStorage3DMultisample = &QOpenGLTextureHelper::dsa_TextureStorage3DMultisample; - TextureStorage2DMultisample = &QOpenGLTextureHelper::dsa_TextureStorage2DMultisample; - TextureImage3D = &QOpenGLTextureHelper::dsa_TextureImage3D; - TextureImage2D = &QOpenGLTextureHelper::dsa_TextureImage2D; - TextureImage1D = &QOpenGLTextureHelper::dsa_TextureImage1D; - TextureSubImage3D = &QOpenGLTextureHelper::dsa_TextureSubImage3D; - TextureSubImage2D = &QOpenGLTextureHelper::dsa_TextureSubImage2D; - TextureSubImage1D = &QOpenGLTextureHelper::dsa_TextureSubImage1D; - CompressedTextureSubImage1D = &QOpenGLTextureHelper::dsa_CompressedTextureSubImage1D; - CompressedTextureSubImage2D = &QOpenGLTextureHelper::dsa_CompressedTextureSubImage2D; - CompressedTextureSubImage3D = &QOpenGLTextureHelper::dsa_CompressedTextureSubImage3D; - CompressedTextureImage1D = &QOpenGLTextureHelper::dsa_CompressedTextureImage1D; - CompressedTextureImage2D = &QOpenGLTextureHelper::dsa_CompressedTextureImage2D; - CompressedTextureImage3D = &QOpenGLTextureHelper::dsa_CompressedTextureImage3D; - } else { - // Use our own DSA emulation - TextureParameteri = &QOpenGLTextureHelper::qt_TextureParameteri; - TextureParameteriv = &QOpenGLTextureHelper::qt_TextureParameteriv; - TextureParameterf = &QOpenGLTextureHelper::qt_TextureParameterf; - TextureParameterfv = &QOpenGLTextureHelper::qt_TextureParameterfv; - GenerateTextureMipmap = &QOpenGLTextureHelper::qt_GenerateTextureMipmap; - TextureStorage3D = &QOpenGLTextureHelper::qt_TextureStorage3D; - TextureStorage2D = &QOpenGLTextureHelper::qt_TextureStorage2D; - TextureStorage1D = &QOpenGLTextureHelper::qt_TextureStorage1D; - TextureStorage3DMultisample = &QOpenGLTextureHelper::qt_TextureStorage3DMultisample; - TextureStorage2DMultisample = &QOpenGLTextureHelper::qt_TextureStorage2DMultisample; - TextureImage3D = &QOpenGLTextureHelper::qt_TextureImage3D; - TextureImage2D = &QOpenGLTextureHelper::qt_TextureImage2D; - TextureImage1D = &QOpenGLTextureHelper::qt_TextureImage1D; - TextureSubImage3D = &QOpenGLTextureHelper::qt_TextureSubImage3D; - TextureSubImage2D = &QOpenGLTextureHelper::qt_TextureSubImage2D; - TextureSubImage1D = &QOpenGLTextureHelper::qt_TextureSubImage1D; - CompressedTextureSubImage1D = &QOpenGLTextureHelper::qt_CompressedTextureSubImage1D; - CompressedTextureSubImage2D = &QOpenGLTextureHelper::qt_CompressedTextureSubImage2D; - CompressedTextureSubImage3D = &QOpenGLTextureHelper::qt_CompressedTextureSubImage3D; - CompressedTextureImage1D = &QOpenGLTextureHelper::qt_CompressedTextureImage1D; - CompressedTextureImage2D = &QOpenGLTextureHelper::qt_CompressedTextureImage2D; - CompressedTextureImage3D = &QOpenGLTextureHelper::qt_CompressedTextureImage3D; - } - - // Some DSA functions are part of NV_texture_multisample instead - if (!context->isOpenGLES() - && context->hasExtension(QByteArrayLiteral("GL_NV_texture_multisample"))) { - TextureImage3DMultisampleNV = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , GLenum , GLsizei , GLint , GLsizei , GLsizei , GLsizei , GLboolean )>(context->getProcAddress("glTextureImage3DMultisampleNV")); - TextureImage2DMultisampleNV = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , GLenum , GLsizei , GLint , GLsizei , GLsizei , GLboolean )>(context->getProcAddress("glTextureImage2DMultisampleNV")); - - TextureImage3DMultisample = &QOpenGLTextureHelper::dsa_TextureImage3DMultisample; - TextureImage2DMultisample = &QOpenGLTextureHelper::dsa_TextureImage2DMultisample; - } else { - TextureImage3DMultisample = &QOpenGLTextureHelper::qt_TextureImage3DMultisample; - TextureImage2DMultisample = &QOpenGLTextureHelper::qt_TextureImage2DMultisample; - } - -#if defined(QT_OPENGL_ES_2) - // Here we are targeting OpenGL ES 2.0+ only. This is likely using EGL, where, - // similarly to WGL, non-extension functions (i.e. any function that is part of the - // GLES spec) *may* not be queried via eglGetProcAddress. - - // OpenGL 1.0 - TexImage1D = 0; - - // OpenGL 1.1 - TexSubImage1D = 0; - - // OpenGL 1.3 - GetCompressedTexImage = 0; - CompressedTexSubImage1D = 0; - CompressedTexSubImage2D = ::glCompressedTexSubImage2D; - CompressedTexImage1D = 0; - CompressedTexImage2D = ::glCompressedTexImage2D; - ActiveTexture = ::glActiveTexture; - - // OpenGL 3.0 - GenerateMipmap = ::glGenerateMipmap; - - // OpenGL 3.2 - TexImage3DMultisample = 0; - TexImage2DMultisample = 0; - - // OpenGL 4.2 - QOpenGLContext *ctx = QOpenGLContext::currentContext(); - if (ctx->format().majorVersion() >= 3) { - // OpenGL ES 3.0+ has immutable storage for 2D and 3D at least. - QOpenGLExtraFunctionsPrivate *extra = static_cast<QOpenGLExtensions *>(context->extraFunctions())->d(); - TexStorage3D = extra->f.TexStorage3D; - TexStorage2D = extra->f.TexStorage2D; - } else { - TexStorage3D = 0; - TexStorage2D = 0; - } - TexStorage1D = 0; - - // OpenGL 4.3 - TexStorage3DMultisample = 0; - TexStorage2DMultisample = 0; - TexBufferRange = 0; - TextureView = 0; - - // OpenGL ES 3.1+ has TexStorage2DMultisample - if (ctx->format().version() >= qMakePair(3, 1)) { - QOpenGLExtraFunctionsPrivate *extra = static_cast<QOpenGLExtensions *>(context->extraFunctions())->d(); - TexStorage2DMultisample = extra->f.TexStorage2DMultisample; - } - -#endif - - if (context->isOpenGLES() && context->hasExtension(QByteArrayLiteral("GL_OES_texture_3D"))) { - TexImage3D = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLenum, GLint, GLint, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, const GLvoid*)>(context->getProcAddress("glTexImage3DOES")); - TexSubImage3D = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLenum, const GLvoid*)>(context->getProcAddress("glTexSubImage3DOES")); - CompressedTexImage3D = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLsizei, const GLvoid*)>(context->getProcAddress("glCompressedTexImage3DOES")); - CompressedTexSubImage3D = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid*)>(context->getProcAddress("glCompressedTexSubImage3DOES")); - } else { - QOpenGLContext *ctx = QOpenGLContext::currentContext(); - if (ctx->isOpenGLES() && ctx->format().majorVersion() >= 3) { - // OpenGL ES 3.0+ has glTexImage3D. - QOpenGLExtraFunctionsPrivate *extra = static_cast<QOpenGLExtensions *>(context->extraFunctions())->d(); - TexImage3D = extra->f.TexImage3D; - TexSubImage3D = extra->f.TexSubImage3D; - CompressedTexImage3D = extra->f.CompressedTexImage3D; - CompressedTexSubImage3D = extra->f.CompressedTexSubImage3D; - } else { - // OpenGL 1.2 - TexImage3D = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLenum , GLint , GLint , GLsizei , GLsizei , GLsizei , GLint , GLenum , GLenum , const GLvoid *)>(context->getProcAddress("glTexImage3D")); - TexSubImage3D = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLenum , GLint , GLint , GLint , GLint , GLsizei , GLsizei , GLsizei , GLenum , GLenum , const GLvoid *)>(context->getProcAddress("glTexSubImage3D")); - - // OpenGL 1.3 - CompressedTexImage3D = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLenum , GLint , GLenum , GLsizei , GLsizei , GLsizei , GLint , GLsizei , const GLvoid *)>(context->getProcAddress("glCompressedTexImage3D")); - CompressedTexSubImage3D = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLenum , GLint , GLint , GLint , GLint , GLsizei , GLsizei , GLsizei , GLenum , GLsizei , const GLvoid *)>(context->getProcAddress("glCompressedTexSubImage3D")); - } - } - -#ifndef QT_OPENGL_ES_2 - // OpenGL 1.0 and 1.1 - TexImage1D = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLenum , GLint , GLint , GLsizei , GLint , GLenum , GLenum , const GLvoid *)>(context->getProcAddress("glTexImage1D")); - TexSubImage1D = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLenum , GLint , GLint , GLsizei , GLenum , GLenum , const GLvoid *)>(context->getProcAddress("glTexSubImage1D"));\ - - // OpenGL 1.3 - GetCompressedTexImage = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLenum , GLint , GLvoid *)>(context->getProcAddress("glGetCompressedTexImage")); - CompressedTexSubImage1D = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLenum , GLint , GLint , GLsizei , GLenum , GLsizei , const GLvoid *)>(context->getProcAddress("glCompressedTexSubImage1D")); - CompressedTexSubImage2D = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLenum , GLint , GLint , GLint , GLsizei , GLsizei , GLenum , GLsizei , const GLvoid *)>(context->getProcAddress("glCompressedTexSubImage2D")); - CompressedTexImage1D = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLenum , GLint , GLenum , GLsizei , GLint , GLsizei , const GLvoid *)>(context->getProcAddress("glCompressedTexImage1D")); - CompressedTexImage2D = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLenum , GLint , GLenum , GLsizei , GLsizei , GLint , GLsizei , const GLvoid *)>(context->getProcAddress("glCompressedTexImage2D")); - ActiveTexture = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLenum )>(context->getProcAddress("glActiveTexture")); - - // OpenGL 3.0 - GenerateMipmap = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLenum )>(context->getProcAddress("glGenerateMipmap")); - - // OpenGL 3.2 - TexImage3DMultisample = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLenum , GLsizei , GLint , GLsizei , GLsizei , GLsizei , GLboolean )>(context->getProcAddress("glTexImage3DMultisample")); - TexImage2DMultisample = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLenum , GLsizei , GLint , GLsizei , GLsizei , GLboolean )>(context->getProcAddress("glTexImage2DMultisample")); - - // OpenGL 4.2 - TexStorage3D = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLenum , GLsizei , GLenum , GLsizei , GLsizei , GLsizei )>(context->getProcAddress("glTexStorage3D")); - TexStorage2D = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLenum , GLsizei , GLenum , GLsizei , GLsizei )>(context->getProcAddress("glTexStorage2D")); - TexStorage1D = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLenum , GLsizei , GLenum , GLsizei )>(context->getProcAddress("glTexStorage1D")); - - // OpenGL 4.3 - TexStorage3DMultisample = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLenum , GLsizei , GLenum , GLsizei , GLsizei , GLsizei , GLboolean )>(context->getProcAddress("glTexStorage3DMultisample")); - TexStorage2DMultisample = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLenum , GLsizei , GLenum , GLsizei , GLsizei , GLboolean )>(context->getProcAddress("glTexStorage2DMultisample")); - TexBufferRange = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLenum , GLenum , GLuint , GLintptr , GLsizeiptr )>(context->getProcAddress("glTexBufferRange")); - TextureView = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , GLenum , GLuint , GLenum , GLuint , GLuint , GLuint , GLuint )>(context->getProcAddress("glTextureView")); -#endif -} - -void QOpenGLTextureHelper::dsa_TextureParameteri(GLuint texture, GLenum target, GLenum bindingTarget, GLenum pname, GLint param) -{ - Q_UNUSED(bindingTarget); - TextureParameteriEXT(texture, target, pname, param); -} - -void QOpenGLTextureHelper::dsa_TextureParameteriv(GLuint texture, GLenum target, GLenum bindingTarget, GLenum pname, const GLint *params) -{ - Q_UNUSED(bindingTarget); - TextureParameterivEXT(texture, target, pname, params); -} - -void QOpenGLTextureHelper::dsa_TextureParameterf(GLuint texture, GLenum target, GLenum bindingTarget, GLenum pname, GLfloat param) -{ - Q_UNUSED(bindingTarget); - TextureParameterfEXT(texture, target, pname, param); -} - -void QOpenGLTextureHelper::dsa_TextureParameterfv(GLuint texture, GLenum target, GLenum bindingTarget, GLenum pname, const GLfloat *params) -{ - Q_UNUSED(bindingTarget); - TextureParameterfvEXT(texture, target, pname, params); -} - -void QOpenGLTextureHelper::dsa_GenerateTextureMipmap(GLuint texture, GLenum target, GLenum bindingTarget) -{ - Q_UNUSED(bindingTarget); - GenerateTextureMipmapEXT(texture, target); -} - -void QOpenGLTextureHelper::dsa_TextureStorage3D(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth) -{ - Q_UNUSED(bindingTarget); - TextureStorage3DEXT(texture, target, levels, internalFormat, width, height, depth); -} - -void QOpenGLTextureHelper::dsa_TextureStorage2D(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height) -{ - Q_UNUSED(bindingTarget); - TextureStorage2DEXT(texture, target, levels, internalFormat, width, height); -} - -void QOpenGLTextureHelper::dsa_TextureStorage1D(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei levels, GLenum internalFormat, GLsizei width) -{ - Q_UNUSED(bindingTarget); - TextureStorage1DEXT(texture, target, levels, internalFormat, width); -} - -void QOpenGLTextureHelper::dsa_TextureStorage3DMultisample(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations) -{ - Q_UNUSED(bindingTarget); - TextureStorage3DMultisampleEXT(texture, target, samples, internalFormat, width, height, depth, fixedSampleLocations); -} - -void QOpenGLTextureHelper::dsa_TextureStorage2DMultisample(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations) -{ - Q_UNUSED(bindingTarget); - TextureStorage2DMultisampleEXT(texture, target, samples, internalFormat, width, height, fixedSampleLocations); -} - -void QOpenGLTextureHelper::dsa_TextureImage3D(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) -{ - Q_UNUSED(bindingTarget); - TextureImage3DEXT(texture, target, level, internalFormat, width, height, depth, border, format, type, pixels); -} - -void QOpenGLTextureHelper::dsa_TextureImage2D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels) -{ - Q_UNUSED(bindingTarget); - TextureImage2DEXT(texture, target, level, internalFormat, width, height, border, format, type, pixels); -} - -void QOpenGLTextureHelper::dsa_TextureImage1D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLenum internalFormat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels) -{ - Q_UNUSED(bindingTarget); - TextureImage1DEXT(texture, target, level, internalFormat, width, border, format, type, pixels); -} - -void QOpenGLTextureHelper::dsa_TextureSubImage3D(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) -{ - Q_UNUSED(bindingTarget); - TextureSubImage3DEXT(texture, target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels); -} - -void QOpenGLTextureHelper::dsa_TextureSubImage2D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels) -{ - Q_UNUSED(bindingTarget); - TextureSubImage2DEXT(texture, target, level, xoffset, yoffset, width, height, format, type, pixels); -} - -void QOpenGLTextureHelper::dsa_TextureSubImage1D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels) -{ - Q_UNUSED(bindingTarget); - TextureSubImage1DEXT(texture, target, level, xoffset, width, format, type, pixels); -} - -void QOpenGLTextureHelper::dsa_TextureImage3DMultisample(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations) -{ - Q_UNUSED(bindingTarget); - TextureImage3DMultisampleNV(texture, target, samples, internalFormat, width, height, depth, fixedSampleLocations); -} - -void QOpenGLTextureHelper::dsa_TextureImage2DMultisample(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations) -{ - Q_UNUSED(bindingTarget); - TextureImage2DMultisampleNV(texture, target, samples, internalFormat, width, height, fixedSampleLocations); -} - -void QOpenGLTextureHelper::dsa_CompressedTextureSubImage1D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *bits) -{ - Q_UNUSED(bindingTarget); - CompressedTextureSubImage1DEXT(texture, target, level, xoffset, width, format, imageSize, bits); -} - -void QOpenGLTextureHelper::dsa_CompressedTextureSubImage2D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *bits) -{ - Q_UNUSED(bindingTarget); - CompressedTextureSubImage2DEXT(texture, target, level, xoffset, yoffset, width, height, format, imageSize, bits); -} - -void QOpenGLTextureHelper::dsa_CompressedTextureSubImage3D(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) -{ - Q_UNUSED(bindingTarget); - CompressedTextureSubImage3DEXT(texture, target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, bits); -} - -void QOpenGLTextureHelper::dsa_CompressedTextureImage1D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLenum internalFormat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *bits) -{ - Q_UNUSED(bindingTarget); - CompressedTextureImage1DEXT(texture, target, level, internalFormat, width, border, imageSize, bits); -} - -void QOpenGLTextureHelper::dsa_CompressedTextureImage2D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *bits) -{ - Q_UNUSED(bindingTarget); - CompressedTextureImage2DEXT(texture, target, level, internalFormat, width, height, border, imageSize, bits); -} - -void QOpenGLTextureHelper::dsa_CompressedTextureImage3D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *bits) -{ - Q_UNUSED(bindingTarget); - CompressedTextureImage3DEXT(texture, target, level, internalFormat, width, height, depth, border, imageSize, bits); -} - -namespace { - -class TextureBinder -{ -public: - TextureBinder(QOpenGLFunctions *functions, GLuint texture, GLenum target, GLenum bindingTarget) - : m_functions(functions) - { - // For cubemaps we can't use the standard DSA emulation as it is illegal to - // try to bind a texture to one of the cubemap face targets. So we force the - // target and binding target to the cubemap values in this case. - switch (target) { - case GL_TEXTURE_CUBE_MAP_NEGATIVE_X: - case GL_TEXTURE_CUBE_MAP_POSITIVE_X: - case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y: - case GL_TEXTURE_CUBE_MAP_POSITIVE_Y: - case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z: - case GL_TEXTURE_CUBE_MAP_POSITIVE_Z: - bindingTarget = GL_TEXTURE_BINDING_CUBE_MAP; - m_target = GL_TEXTURE_CUBE_MAP; - break; - - default: - m_target = target; - break; - } - - m_functions->glGetIntegerv(bindingTarget, &m_oldTexture); - m_functions->glBindTexture(m_target, texture); - } - - ~TextureBinder() - { - m_functions->glBindTexture(m_target, m_oldTexture); - } - -private: - QOpenGLFunctions *m_functions; - GLenum m_target; - GLint m_oldTexture; -}; - -} // namespace - -void QOpenGLTextureHelper::qt_TextureParameteri(GLuint texture, GLenum target, GLenum bindingTarget, GLenum pname, GLint param) -{ - TextureBinder binder(functions, texture, target, bindingTarget); - functions->glTexParameteri(target, pname, param); -} - -void QOpenGLTextureHelper::qt_TextureParameteriv(GLuint texture, GLenum target, GLenum bindingTarget, GLenum pname, const GLint *params) -{ - TextureBinder binder(functions, texture, target, bindingTarget); - functions->glTexParameteriv(target, pname, params); -} - -void QOpenGLTextureHelper::qt_TextureParameterf(GLuint texture, GLenum target, GLenum bindingTarget, GLenum pname, GLfloat param) -{ - TextureBinder binder(functions, texture, target, bindingTarget); - functions->glTexParameterf(target, pname, param); -} - -void QOpenGLTextureHelper::qt_TextureParameterfv(GLuint texture, GLenum target, GLenum bindingTarget, GLenum pname, const GLfloat *params) -{ - TextureBinder binder(functions, texture, target, bindingTarget); - functions->glTexParameterfv(target, pname, params); -} - -void QOpenGLTextureHelper::qt_GenerateTextureMipmap(GLuint texture, GLenum target, GLenum bindingTarget) -{ - TextureBinder binder(functions, texture, target, bindingTarget); - functions->glGenerateMipmap(target); -} - -void QOpenGLTextureHelper::qt_TextureStorage3D(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth) -{ - TextureBinder binder(functions, texture, target, bindingTarget); - glTexStorage3D(target, levels, internalFormat, width, height, depth); -} - -void QOpenGLTextureHelper::qt_TextureStorage2D(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height) -{ - TextureBinder binder(functions, texture, target, bindingTarget); - glTexStorage2D(target, levels, internalFormat, width, height); -} - -void QOpenGLTextureHelper::qt_TextureStorage1D(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei levels, GLenum internalFormat, GLsizei width) -{ - TextureBinder binder(functions, texture, target, bindingTarget); - glTexStorage1D(target, levels, internalFormat, width); -} - -void QOpenGLTextureHelper::qt_TextureStorage3DMultisample(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations) -{ - TextureBinder binder(functions, texture, target, bindingTarget); - glTexStorage3DMultisample(target, samples, internalFormat, width, height, depth, fixedSampleLocations); -} - -void QOpenGLTextureHelper::qt_TextureStorage2DMultisample(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations) -{ - TextureBinder binder(functions, texture, target, bindingTarget); - glTexStorage2DMultisample(target, samples, internalFormat, width, height, fixedSampleLocations); -} - -void QOpenGLTextureHelper::qt_TextureImage3D(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) -{ - TextureBinder binder(functions, texture, target, bindingTarget); - glTexImage3D(target, level, internalFormat, width, height, depth, border, format, type, pixels); -} - -void QOpenGLTextureHelper::qt_TextureImage2D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels) -{ - TextureBinder binder(functions, texture, target, bindingTarget); - functions->glTexImage2D(target, level, internalFormat, width, height, border, format, type, pixels); -} - -void QOpenGLTextureHelper::qt_TextureImage1D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLenum internalFormat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels) -{ - TextureBinder binder(functions, texture, target, bindingTarget); - glTexImage1D(target, level, internalFormat, width, border, format, type, pixels); -} - -void QOpenGLTextureHelper::qt_TextureSubImage3D(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) -{ - TextureBinder binder(functions, texture, target, bindingTarget); - glTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels); -} - -void QOpenGLTextureHelper::qt_TextureSubImage2D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels) -{ - TextureBinder binder(functions, texture, target, bindingTarget); - functions->glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels); -} - -void QOpenGLTextureHelper::qt_TextureSubImage1D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels) -{ - TextureBinder binder(functions, texture, target, bindingTarget); - glTexSubImage1D(target, level, xoffset, width, format, type, pixels); -} - -void QOpenGLTextureHelper::qt_TextureImage3DMultisample(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations) -{ - TextureBinder binder(functions, texture, target, bindingTarget); - glTexImage3DMultisample(target, samples, internalFormat, width, height, depth, fixedSampleLocations); -} - -void QOpenGLTextureHelper::qt_TextureImage2DMultisample(GLuint texture, GLenum target, GLenum bindingTarget, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations) -{ - TextureBinder binder(functions, texture, target, bindingTarget); - glTexImage2DMultisample(target, samples, internalFormat, width, height, fixedSampleLocations); -} - -void QOpenGLTextureHelper::qt_CompressedTextureSubImage1D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *bits) -{ - TextureBinder binder(functions, texture, target, bindingTarget); - glCompressedTexSubImage1D(target, level, xoffset, width, format, imageSize, bits); -} - -void QOpenGLTextureHelper::qt_CompressedTextureSubImage2D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *bits) -{ - TextureBinder binder(functions, texture, target, bindingTarget); - glCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, bits); -} - -void QOpenGLTextureHelper::qt_CompressedTextureSubImage3D(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) -{ - TextureBinder binder(functions, texture, target, bindingTarget); - glCompressedTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, bits); -} - -void QOpenGLTextureHelper::qt_CompressedTextureImage1D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLenum internalFormat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *bits) -{ - TextureBinder binder(functions, texture, target, bindingTarget); - glCompressedTexImage1D(target, level, internalFormat, width, border, imageSize, bits); -} - -void QOpenGLTextureHelper::qt_CompressedTextureImage2D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *bits) -{ - TextureBinder binder(functions, texture, target, bindingTarget); - glCompressedTexImage2D(target, level, internalFormat, width, height, border, imageSize, bits); -} - -void QOpenGLTextureHelper::qt_CompressedTextureImage3D(GLuint texture, GLenum target, GLenum bindingTarget, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *bits) -{ - TextureBinder binder(functions, texture, target, bindingTarget); - glCompressedTexImage3D(target, level, internalFormat, width, height, depth, border, imageSize, bits); -} - -QT_END_NAMESPACE |