【发布时间】:2021-03-09 16:58:15
【问题描述】:
我一直在关注this 关于渲染到屏幕外纹理的教程,但我在创建渲染目标时遇到了困难。
我已经注册了一个错误回调函数,我收到了一个带有GL_DEBUG_SOURCE_API 源的GL_DEBUG_TYPE_OTHER 错误,glCheckNamedFramebufferStatus() 吐出的消息是:
FBO 不完整:颜色附件不完整[0]。
我很难看到我在这里缺少什么,我已经仔细检查了我传递给 OpenGL 函数的参数并尝试删除 glTexParameteri 调用但无济于事。
任何帮助将不胜感激。
GLuint framebuffer = 0;
GLuint renderedTexture;
GLenum drawBuffers[1] = {GL_COLOR_ATTACHMENTS0};
bool buildOffscreenBuffer()
{
// creating frame & render texture to draw picker buffer to
glGenFramebuffers(1, &framebuffer);
glBindFramebuffer(GL_FRAMEBUFFER, framebuffer);
glGenTextures(1, &renderedTexture);
glBindTexture(GL_TEXTURE_2D, renderedTexture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 1920, 1080,
0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
// configuring framebuffer
glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
renderedTexture, 0);
glDrawBuffers(1, drawBuffers);
return glCheckNamedFramebufferStatus(framebuffer, GL_FRAMEBUFFER) == GL_FRAMEBUFFER_COMPLETE;
}
更新: 根据derhass'answer,根据规范似乎不需要 GL_RGB。我尝试将其更新为 GL_RGBA 但我遇到了同样的错误。由于这可能与实现相关,我将列出我的卡和驱动程序:
卡:RX Vega 56
司机:mesa/amdgpu
【问题讨论】:
-
请提供一个实际产生问题的示例。顺便说一句,您可以检查my dirty FBO example(通过
gcc HelloFBO.c -lglfw -lGLEW -lGL编译),如果它不能在mesa/amdgpu 上运行,我会感到惊讶。只需添加帧缓冲区完整性检查,并根据需要更改 FBO 尺寸。
标签: c opengl framebuffer