Qt5 - glTexStorage2D/glBindImageTexture undefined?

Qt5 - glTexStorage2D/glBindImageTexture undefined?

本文关键字:undefined glBindImageTexture glTexStorage2D Qt5      更新时间:2023-10-16

我正在使用Qt 5.7.0与OpenGL 4.4,我试图移植一些旧代码与Qt一起工作。据我所知,Qt没有自己的方式来处理着色器纹理,所以我使用以下代码在我的GLEW,非Qt项目中工作良好:

    float* data = new float[IMAGE_WIDTH * IMAGE_HEIGHT];
    for (int i = 0; i < IMAGE_WIDTH * IMAGE_HEIGHT; ++i)
        data[i] = 0.f;
    GLuint tex[1];
    glGenTextures(1, tex);
    glBindTexture(GL_TEXTURE_2D, tex[0]);
    glTexStorage2D(GL_TEXTURE_2D, 1, GL_R32F, IMAGE_WIDTH, IMAGE_HEIGHT);
    glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, IMAGE_WIDTH, IMAGE_HEIGHT, GL_RED, GL_FLOAT, data);
    glBindImageTexture(0, tex[0], 0, GL_FALSE, 0, GL_READ_WRITE, GL_R32F);
    delete[] data;

显然glTexStorage2DglBindImageTexture没有定义。我看过文件,它们应该存在。我试过#include, QOpenGLFunctions_4_4_Core, QOpenGLFunctions_4_2_Core, QOpenGLTextureQOpenGLFunctions,但都没有解决问题。我甚至查看了QOpenGLFunctions_4_4_Core:

的来源
inline void QOpenGLFunctions_4_4_Core::glTexStorage2D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height)
{
    d_4_2_Core->f.TexStorage2D(target, levels, internalformat, width, height);
}

即使创建一个实例也会给我一个错误:

QOpenGLFunctions_4_4_Core gl;
gl.glTexStorage2D((GL_TEXTURE_2D, 1, GL_R32F, IMAGE_WIDTH, IMAGE_HEIGHT);

崩溃并出现"抛出异常:读访问冲突"。这->d_4_2_Core是nullptr。"

是否有a)任何方法来解决这个问题;或者更好的是b)一个Qt的方式做图像加载/存储?

您应该通过QOpenGLContext::versionFunctions()获取指向QOpenGLFunctions_4_4_Core对象的指针。或者,您可以创建自己的对象,但随后必须使用initializeOpenGLFunctions()成员函数手动加载函数指针,而上下文是当前的。

继承特定版本的函数对我来说是有效的。

class MyWidget: public QOpenGLWidget, protected QOpenGLFunctions_4_4_Core
{
...
}