我正在尝试使用附加到帧缓冲区的每 channel 32F 的纹理来渲染纹理。我使用正常的无符号 RGBA 纹理正确地完成了它,但我需要在每个 channel 中提高分辨率。
我更改了纹理的内部格式,但应用程序在执行附件时抛出了 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
有人能帮帮我吗? 非常感谢。
最佳答案
您的 glTexImage2D
调用无效。
GL_RGBA32F
是有效的内部 格式,但不是有效的客户端格式枚举。由于您只是创建纹理而不从客户端内存复制像素数据,因此您指定的格式甚至无关紧要,但它必须仍然有效。
使用
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, _width, _height, 0, GL_RGBA, GL_FLOAT, nullptr);
相反。
关于c++ - 使用带有帧缓冲区的 RGBA32F 纹理抛出 INVALID_ENUM 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27670364/