2011-06-08 85 views
7

OpenGL SuperBible討論紋理緩衝區對象,這些對象是由VBO內部數據形成的紋理。看起來使用它們有好處,但我發現的所有示例都創建了常規紋理。有沒有人有什麼建議關於何時使用其中一個?紋理緩衝區對象或常規紋理?

+0

總結一下基督徒所說的:TBOs是用於高級用途的。對於你通常所說的「紋理」(即圖像),請使用glGenTextures&co。 – Calvin1602 2011-06-09 09:14:17

回答

8

根據extension registry,紋理緩衝區只有一維,不能進行任何過濾,並且必須通過訪問顯式紋理元素(通過索引)來訪問,而不是使用標準化的[0,1]浮點紋理座標。所以它們並不是真正的紋理替代品,而是大型的統一陣列(例如蒙皮矩陣或每個實例數據)。將它們與統一緩衝區進行比較,比對普通紋理進行比較更有意義,如完成here

編輯:如果您想要將VBO數據用於常規的,過濾的2D紋理,則不會繞過數據副本(最好通過PBO完成)。但是,如果您只是希望普通數組訪問VBO數據並且屬性不足以滿足此要求,則紋理緩衝區應該是選擇的方法。

編輯:檢查在OpenGL超級相應章節後,我發現,他們一方面提,該紋理緩衝器總是1維和由離散的整數紋理像素偏移訪問,但是,另一方面無法明確提到缺少過濾。在我看來,他們或多或少地將它們作爲紋理進行宣傳,只是從緩衝區獲取數據,這解釋了OP的問題。但如上所述,這只是錯誤的比較。紋理緩衝區只是提供了一種直接訪問着色器中的緩衝區數據的方式(雖然有一個可調節的元素類型),但不是更多(使它們對普通紋理無用),但也不會少(它們仍然是一個很棒的功能)。

+0

這是完全錯誤的。那個exure支持1d,2d和3d紋理 – 2011-06-08 19:36:44

+0

@VJo不,你的評論是錯誤的。閱讀鏈接的擴展規範以獲取更多信息。也許你正在搞PBO的紋理緩衝區。 – 2011-06-08 19:52:06

+0

@VJo:緩衝區紋理是texels的一維數組,並且緩衝區紋理不支持mipmapping,具有標準化浮點紋理座標的紋理查找以及任何類型的紋理過濾。順便說一句,它是OpenGL 3.1+的一部分:http://www.opengl.org/sdk/docs/man3/xhtml/glTexBuffer.xml – Calvin1602 2011-06-09 09:08:41

0

當VBOs不受支持時使用常規紋理。

+0

這是錯誤的,因爲紋理緩衝區不提供常規紋理的常用特徵。 – 2011-06-08 22:45:35

+1

不能說這個答案是錯誤的,因爲當硬件不支持特性(擴展)時,常規紋理總是可以用來模擬TexBO的行爲。 – rotoglup 2011-06-08 23:42:55

+0

@rotoglup好的,如果從這一點來看,你可能是對的。 – 2011-06-09 01:00:26