繁体   English   中英

Qt5 - glTexStorage2D/glBindImageTexture 未定义?

[英]Qt5 - glTexStorage2D/glBindImageTexture undefined?

我正在将 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 ing 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);

因“抛出异常:读取访问冲突。this->d_4_2_Core 为 nullptr”而崩溃。

a) 有没有办法解决这个问题; 或者更好 b) 一种 Qt 方式来进行图像加载/存储?

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

继承特定版本的功能对我有用。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM