2012-03-24 166 views
9

我正在嘗試編寫一個將視頻相機幀寫入四元組的程序。 我看到教程解釋說幀緩衝可以更快,但仍然在學習如何去做。 但是除了framebuffer之外,我發現還有渲染緩衝區。GLSL Renderbuffer真的需要嗎?

問題是,如果目的只是將紋理寫入填充屏幕的四邊形,我是否真的需要渲染緩衝區?

我知道renderbuffers是用於深度測試的,我認爲這只是用於檢查像素的Z位置,因此,爲我的場景創建渲染緩衝區是正確的嗎?

回答

10

A framebuffer object是一個粘貼圖像的地方,以便您可以渲染它們。顏色緩衝區,深度緩衝區等全部進入幀緩衝區對象。

一個renderbuffer就像一個紋理,但有兩個重要的區別:

  1. 它始終是二維和沒有的貼圖。所以它總是隻有1張圖片。
  2. 不能從讀取渲染緩衝區。你可以將它們附加到一個FBO並渲染給它們,但你不能從它們中抽取紋理訪問或其他東西。

所以你說的是兩個大體上分離的概念。渲染緩衝區不要已將「進行深度測試」。這是渲染緩衝區的常見用例,因爲如果要將顏色渲染爲紋理,通常不會在意深度。您需要需要深度,因爲您需要進行隱藏表面去除的深度測試。但你不需要樣本從那個深度。因此,您不需要製作深度紋理,而是創建一個深度渲染緩衝區。

但是,renderbuffers也可以使用顏色而不是深度格式。你不能將它們作爲紋理附加。你仍然可以從/向他們傳遞信息,你仍然可以用glReadPixels閱讀它們。你無法在着色器中讀取它們。

奇怪的是,這並沒有回答你的問題:

的問題是,如果目的僅僅是寫一個紋理到四會填滿屏幕,我真的需要一個渲染?

我不明白爲什麼你需要一個framebuffer或任何形式的渲染緩衝區。紋理是紋理;只是畫一個紋理四。

+0

我需要使用framebuffer的原因是因爲我在某些頁面閱讀是進行乒乓渲染的唯一方法。我的意圖是使用這種技術來應用幾種濾鏡效果,所以我需要一種方法在穿過片段着色器之後重用紋理的輸出,以根據需要傳遞一些其他效果。 – PerracoLabs 2012-03-24 10:25:47

+1

@ user848253:未來,如果您更瞭解自己的實際情況,您將更有可能獲得準確的信息,而不是提供儘可能少的信息。在你的問題中你所說的全部是你正在嘗試寫一個紋理作爲全屏四元組。 – 2012-03-24 10:27:59

+2

好吧,我仍然把所有的東西放在一起,因爲所有的東西都是我的新東西,我正在閱讀幾個教程,但是找不到一個直接顯示所有概念的教程。總體思路是使用着色器處理視頻幀,應用多個濾鏡,然後將其輸出到屏幕中的四邊形。 – PerracoLabs 2012-03-24 10:31:07