【问题标题】:Using RGBA32F Texture with framebuffer throw INVALID_ENUM error将 RGBA32F 纹理与帧缓冲区一起使用会引发 INVALID_ENUM 错误
【发布时间】:2014-12-27 18:43:47
【问题描述】:

我正在尝试使用附加到帧缓冲区的每通道 32F 纹理来渲染纹理。我使用正常的无符号 RGBA 纹理正确地做到了这一点,但我需要每个通道的分辨率更高。

我更改了纹理的内部格式,但在执行附件时,应用程序抛出了 INVALID_ENUM 错误。我读到可以使用这种格式linklink 附加纹理。所以错误可能在其他地方。

这里是sn-ps的代码:

glGenTextures(1, &mTexId);
glBindTexture(GL_TEXTURE_2D, mTexId);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, _width, _height, 0, GL_RGBA32F , GL_UNSIGNED_BYTE, nullptr);

glBindFramebuffer(GL_FRAMEBUFFER, mBufferId);
glFramebufferTexture(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, mTexId, 0);

checkErrors();      // <<--- Here I check the possible errors and it's where i got the INVALID_ENUM

有人可以帮助我吗? 非常感谢。

【问题讨论】:

    标签: c++ opengl opengl-es textures framebuffer


    【解决方案1】:

    您的glTexImage2D 呼叫无效。

    GL_RGBA32F 是有效的 internal 格式,但不是有效的客户端格式枚举。由于您只是创建纹理而不从客户端内存复制像素数据,因此您在此处指定的格式甚至无关紧要,但它必须仍然有效。

    使用

    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, _width, _height, 0, GL_RGBA, GL_FLOAT, nullptr);
    

    改为。

    【讨论】:

    • 哦!我错过了那个参数,它现在可以工作了。非常感谢。
    猜你喜欢
    • 2014-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多