2010-07-09 87 views
2

當紋理切換時,爲什麼速度變慢?關於OpenGLES中的紋理開關


代碼 - 1

glBindTexture(GL_TEXTURE_2D,texId01);

glDrawArray((4,8 GL_TRIANGLES,0,4);

glBindTexture(GL_TEXTURE_2D,texId02);

glDrawArray((4,8 GL_TRIANGLES,0,4);


代碼 - 2

glBindTexture(GL_TEXTURE_2D,texId01);

glDrawArray(GL_TRIANGLES,0,4);

glDrawArray(GL_TRIANGLES,0,4);


爲什麼這些速度不同?

+0

量化「爲什麼速度慢」 – bobobobo 2013-02-21 22:38:43

回答

3

由於驅動程序必須執行一些內部驗證,因此要檢查一切是否如預期的那樣,綁定紋理是一項昂貴的操作。

考慮到這一點,您應該儘量減少紋理綁定操作。做這件事的一種常見方式是在繪製時按紋理對原始圖元進行排序(還有着色器,如果GL ES 2.0)。

+0

哦,我明白了。 我換了很多次。 我下次照顧。 謝謝! – Shiva 2010-07-10 19:08:10

7

Upvoted的答案在PowerVR硬件上的OpenGLES,保證以及其他方面都是錯誤的。我幾次遇到這種「紋理綁定緩慢」的神話,但沒有一個性能文檔(Apple或Imagination Technologies)提到了這一點。

所以我與Imagination Technologies公司選中此直接,他們的回答是:

使用glBindTexture不應該再說什麼,我們在我們的文檔中所提到的性能有什麼區別,有一個小的開銷,但不是一個巨大的。有些信息在那裏,似乎用glTexture2D重新加載紋理這是一個緩慢的呼叫時提紋理切換,當第一次初始化應用

+0

+1爲未知的事情。 – Eonil 2011-07-03 12:14:12

1

溼婆,BHAI太陽時才需要這樣做。我知道你是高達一些遊戲gles

爲什麼你不得不問這樣的問題,如果它真的很慢,你會能夠優化 像因爲司機等慢。

嘗試使用單一的大紋理 使用單獨的緩存對象來存儲你想在這個紋理使用的每個圖像, 就是它了...... 即使質地開關速度很慢,你仍舊領先的座標,因爲你正在使用單紋理 和您使用緩衝區的事實...