2012-06-11 61 views
0

我有一個動態的高度圖我的地形,它會幾乎每幀進行修改,我應該使用gltexsubimage2d和紋理高度圖或更新頂點緩存的每一幀,而不是創建VBO的?什麼方法應該更快?據我所知,我失去了硬件雙線性過濾器通過vbo發送數據,但根據谷歌gltexxubimage2d導致移動設備上的問題,它看起來不像我可以逐幀使用它,因爲它的速度慢。高度圖:gltexsubimage2d VS頂點屬性

其實問題應該是:是的紋理數據發送到GPU內存比使用頂點屬性更快?是它的實現依賴?在android中,是否有任何物體在opengl中實現了紋理更新,例如,使用quad作爲視頻播放畫布?我知道這個問題可能是對像mali-400或tegra3這樣的新設備的廢話,這兩種方法對我來說應該是性能上的嫌疑,但我想與adreno200或sgx535兼容。

回答

0

我會建議去紋理修改與頂點操作。

這是因爲操縱VBO需要比修改的紋理存儲器到存儲器更多的數據移動和存儲器帶寬。

考慮到每個頂點具有至少5個項目(X + Y + Z + TX + TY),但oftern 8項考慮它們是在任何照明算法非常典型的法線。

在另一邊,相反,紋理僅僅是一個每頂點(典型的)值。

這個解決方案導致了很多緩慢的一個非常常見的錯誤是,許多新手(我確信這不是你的情況)啓用他們用於他們的高度圖的紋理的mipmap生成。

確保禁用它:

glTexParameteri(GL_TEXTURE_2D,GL_GENERATE_MIPMAP,GL_FALSE);

另一個建議是把紋理的像素的格式到非常最低要求,具有8888比具有444像素的分辨率要重得多。這意味着每幀的傳輸速度要快得多。

我希望這有助於某種方式。