簡體   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