Qt5 - glTexStorage2D / glBindImageTexture undefined?

时间:2016-08-07 20:45:09

标签: c++ qt opengl textures

我正在使用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_CoreQOpenGLFunctions_4_2_CoreQOpenGLTextureQOpenGLFunctions,但没有人解决问题。我甚至研究过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);

崩溃&#34;抛出异常:读取访问冲突。 this-&gt; d_4_2_Core是nullptr。&#34;

有没有)解决这个问题的方法;或更好的是b)Qt方式进行图像加载/存储?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

继承适用于我的功能的特定版本。

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