[英]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.