Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Qt5-glTexStorage2D/glBindImageTexture未定义?_C++_Qt_Opengl_Textures - Fatal编程技术网

C++ Qt5-glTexStorage2D/glBindImageTexture未定义?

C++ Qt5-glTexStorage2D/glBindImageTexture未定义?,c++,qt,opengl,textures,C++,Qt,Opengl,Textures,我将Qt5.7.0与OpenGL4.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];

我将Qt5.7.0与OpenGL4.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;
即使创建实例也会给我一个错误:

QOpenGLFunctions_4_4_Core gl;
gl.glTexStorage2D((GL_TEXTURE_2D, 1, GL_R32F, IMAGE_WIDTH, IMAGE_HEIGHT);
由于“引发异常:读取访问冲突。此->d_4_2_核心为nullptr”而崩溃


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

您应该通过获取指向
QOpenGLFunctions\u 4\u Core
对象的指针。或者,您可以创建自己的对象,但随后必须使用
InitializePenglFunctions()
成员函数手动加载函数指针,同时将上下文设置为当前上下文。

您应该通过获取指向
QOpenGLFunctions_4_4_核心
对象的指针。或者,您可以创建自己的对象,但随后必须使用
InitializePenglFunctions()
成员函数手动加载函数指针,同时上下文变为当前上下文。

继承适用于我的函数的特定版本

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

继承特定版本的函数对我来说很有用

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

有什么原因让你不能只使用常规的OpenGL调用而不去查看Qt的包装器吗?@Nicolas我发现Qt的方式做事情更有条理,更容易处理,我宁愿用Qt而不是半个Qt来做任何事情,半常规OpenGL。你有什么理由不能只使用常规OpenGL调用而不去查看Qt的包装器吗?@Nicolas我只是觉得Qt方式做事更有条理,更容易处理,我更愿意用Qt而不是半Qt,半常规OpenGL做任何事。谢谢你的回答,然而,通过尝试获取上下文,我发现我的基本窗口类继承的版本是OpenGL 3.1,这就是函数未定义的原因;将其更改为4.4解决了错误。感谢您的回答,但是通过尝试获取上下文,我发现我的基本窗口类继承的版本是OpenGL 3.1,这就是函数未定义的原因;将其更改为4.4解决了错误。