使用RGBA32F Texture with framebuffer会抛出INVALID_ENUM错误

时间:2014-12-27 18:43:48

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

我正在尝试使用附加到帧缓冲区的每通道32F纹理来渲染纹理。我使用普通的无符号RGBA纹理正确地完成了它,但我需要在每个通道中获得更高的分辨率。

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

以下是代码片段:

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

任何人都可以帮助我吗? 非常感谢你。

1 个答案:

答案 0 :(得分:2)

您的glTexImage2D来电无效。

GL_RGBA32F是有效的内部格式,但不是有效的客户端格式枚举。由于您只是在不从客户端内存中复制像素数据的情况下创建纹理,因此您指定的格式甚至不重要,但它必须仍然有效。

使用

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

代替。