c++ - 使用带有帧缓冲区的 RGBA32F 纹理抛出 INVALID_ENUM 错误

标签 c++ opengl opengl-es textures framebuffer

我正在尝试使用附加到帧缓冲区的每 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/

相关文章:

c++ - CMake 声称找到 OpenGL 但找不到 EGL 和 OpenGL::GL

android - GLUtils.texImage2D 和纹理中的 Alpha 问题

c++ - 如何将派生类的指针传递给基类指针的引用?

c++ - 从套接字流中分离并显示位图

c++ - 如何设置 NupenGL 并将其包含在 Visual Studio 项目中

c++ - 编译错误: cannot find -lGLU and -lGL in kubuntu linux

c++ - OpenGL:用几个可移动的灯更新阴影

android - 如何在 Android 上启用 OpenGL 扩展 GL_EXT_shader_framebuffer_fetch?

c++ - 使用 Boost Karma 打印 boost::posix_time::time_duration

c++ - 将 makefile 转换为其相关的 makefile