我正在尝试使用附加到帧缓冲区的每通道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
任何人都可以帮助我吗? 非常感谢你。
答案 0 :(得分:2)
您的glTexImage2D
来电无效。
GL_RGBA32F
是有效的内部格式,但不是有效的客户端格式枚举。由于您只是在不从客户端内存中复制像素数据的情况下创建纹理,因此您指定的格式甚至不重要,但它必须仍然有效。
使用
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, _width, _height, 0, GL_RGBA, GL_FLOAT, nullptr);
代替。