簡體   English   中英

為什么這個 OpenGL 幀緩沖顏色附件不完整?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM