[英]Why is this OpenGL framebuffer color attachment incomplete?
我一直在关注这个关于渲染到屏幕外纹理的教程,但是我在创建渲染目标时遇到了困难。 我已经注册了一个错误回调 function 并且我收到一个带有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的回答,根据规范,似乎不需要 GL_RGB。 我尝试将其更新为 GL_RGBA 但我遇到了同样的错误。 由于这可能与实现相关,我将列出我的卡和驱动程序:
卡:RX Vega 56
驱动程序:台面/amdgpu
根据 GL 规范, GL_RGB
不在所需的可渲染格式集中,因此实现可以不支持它。 改用GL_RGBA
。
设法弄清了这一点。 我实际上已经修复了简化帖子示例的错误。
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 1920, 1080,
0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
实际上是从平台层的助手 function 获取宽度和高度,但是 function 返回了一个struct {int, int}
我存储在一个struct {float, float}
中。 这导致垃圾作为宽度和高度传递给glTexImage2D
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.