2010-03-09 36 views
9
glTexSubImage和glTexImage功能之間的區別

兩者有什麼功能之間的區別? 任何性能差異?在OpenGL

謝謝..

回答

18

創建使用glTexImage紋理,然後更新glTexSubImage內容。當你更新紋理時,你可以更新整個紋理,或者只是一個子矩形。

創建一個紋理並更新它比創建並重復刪除它效率高得多,因此從這個意義上說,如果您有要更新的紋理,請始終使用glTexSubImage(在初始創建後)。

其他技術可以應用於紋理的更新。例如,有關詳細信息,請參閱texture streaming上的這篇文章。

(原文使用glMapBuffer紋理更新這個帖子建議 - 見下面的討論。)

+0

+1,但我不同意你的最後一句話同意。你通常不能映射紋理。無論如何,它們傾向於以非線性格式存儲在GPU端。所以......如果你在調用SubTexture之前自己上傳(到緩衝區對象),你可以強制GPU在卡上進行復制/調整。不一定是淨勝。 – Bahbar 2010-03-09 08:05:55

+0

@Bahbar這非常有趣。那麼從主內存中的圖像數據更新紋理的最快方法是什麼?只需直接調用'glTexSubImage2D'? IIRC這是我推薦'glMapBuffer'做DMA傳輸的書籍之一。 – gavinb 2010-03-09 12:37:20

+0

我以爲你用glTexImage創建紋理,而不是glTexSubImage。 – genpfault 2010-03-09 16:49:32

1

名稱中的「子」的GL功能不限於功率爲2的尺寸。正如gavinb指出的那樣,您需要使用一次非子變量來設置整體尺寸,但我不同意重複調用非子變量比使用「sub」更新要慢 - GPU是隻要您使用相同的紋理ID,仍然可以自由覆蓋現有紋理。

+0

好吧,它_can_,但會嗎?至少,它需要驗證TexImage的所有參數是否與先前的參數兼容,以確定分配是否正確。指出,這不是SubTexture的問題。而且,兩者的力量並不相關,因爲現在需要在GL中支持NPOT紋理。 – Bahbar 2010-03-09 08:08:41