[英]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;
然而顯然glTexStorage2D
和glBindImageTexture
是未定義的。 我看過文檔,它們應該存在。 我已經嘗試過#include
ing QOpenGLFunctions_4_4_Core
、 QOpenGLFunctions_4_2_Core
、 QOpenGLTexture
和QOpenGLFunctions
但都沒有解決問題。 我什至查看了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.