2013-04-23 221 views
0

我想渲染到一個fbo,然後使用該紋理作爲輸入到我的第二渲染通道進行後期處理,但似乎glClearglClearColor會影響已渲染到的紋理。我怎樣才能讓它們隻影響顯示緩衝區?渲染到幀緩衝區和屏幕

我的代碼看起來是這樣的:

UseRenderingShaderProgram(); 
glBindFramebuffer(GL_FRAMEBUFFER, fb); 
glClearColor(0.0, 0.0, 0.0, 0.0); 
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

renderWorld(); 

// render to screen 
UsePostProcessingShaderProgram(); 
glBindFramebuffer(GL_FRAMEBUFFER, 0); 

glClearColor(0.0, 0.0, 0.0, 1.0); // <== texture appears to get cleared in this two lines. 
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

renderWorld(); 

glfwSwapBuffers(); 
+0

*「紋理似乎在這兩行中被清除。」* - 事實並非如此,您的錯誤在別處。 – 2013-04-23 09:45:49

回答

1

如果我不得不做出一個受過教育的猜你定義你的紋理使用紋理貼圖的縮小過濾。使用FBO渲染到紋理後,只定義一個mipmap級別。但是,如果沒有選擇創建的所有mipmap級別,則紋理不完整並且不會傳輸數據。最簡單的解決方案將通過設置它的微小濾波器參數被禁止用於這種​​質地紋理映射

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 

而且你必須確保你正確地解除綁定和綁定紋理被附加到FBO。

  • 在綁定FBO之前取消綁定紋理(您可以安全地將它連接到它)。

  • 在將紋理作爲圖像源進行渲染之前解除FBO的綁定。

添加這兩個更改(綁定順序和mipmap級別)應使您的紋理顯示。

相關問題