2014-08-30 31 views
2

可以指定什麼緩衝器繪製使用
glDrawBuffer()如何關聯到繪製的深度紋理

例如
GLenum緩衝器[] = {} GL_COLOR_ATTACHMENT0 glDrawBuffers;
glDrawBuffers(1,buffers);

好吧,這是有道理的。

雖然深度紋理怎麼樣?

所以我們在這裏我們創建一個幀緩衝

glGenFramebuffers(1, &m_uifboHandle); 

    // Initialize FBO 
    glBindFramebuffer(GL_FRAMEBUFFER, m_uifboHandle); 

    unsigned int m_uiTextureHandle[2]; 
    glGenTextures(2, m_uiTextureHandle); 

    glBindTexture(GL_TEXTURE_2D, m_uiTextureHandle[x]); 

    // Reserve space for our 2D render target 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 

    glTexImage2D(GL_TEXTURE_2D, 0, iInternalFormat, uiWidth, uiHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL); 
    glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_uiTextureHandle[0], 0); 

    //now the depth  
    glBindTexture(GL_TEXTURE_2D, m_uiTextureHandle[1]); 
    glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT24, uiWidth, uiHeight, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, 0); 
    glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, m_uiTextureHandle[1], 0); 

    glBindFramebuffer(GL_FRAMEBUFFER, 0); 

因此,如果這些步驟基本上是:
1)作出的框架來處理渲染到
2)爲我們提供了一個位置,以附件0寫入
3)創建我們的深度附件

現在我怎麼寫它?我看到渲染自動呈現給它的例子,但我想了解綁定如何寫入它的作品。

回答

1

glDrawBuffers根本與深度緩衝沒有關係。它允許選擇顏色的緩衝區進行渲染,並且每個幀緩衝區可以有多個顏色緩衝區。但最多隻能有一個深度緩衝區。因此,要麼根本沒有深度緩衝區,要麼有一個深度值寫入深度緩衝區(假設深度測試已啓用且深度掩碼設置爲GL_TRUE)。

+1

看到多數民衆贊成我一直在想,但我可以得到顏色附件工作正常,但我不能深入工作。 – 2014-08-30 23:36:46