2012-08-03 74 views
7

是否glGetUniformLocationglGetAttribLocation耗時?OpenGL - 我應該存儲屬性/統一位置嗎?

哪種方式更好?

  1. 致電glGetAttribLocationglGetUniformLocation每次我需要它嗎?
  2. 將存儲位置保存在可變物中,並在需要時使用它們?
+0

感謝給予好評:d – GLES 2013-01-26 20:52:56

回答

5

無論是在Android或iPhone,對於OpenGL的表面,你將有類似的方法: onSurfaceCreated和onSurfaceChanged, 進入取校服的習慣,而這2種方法的屬性在這裏。

可以使渲染速度更快(這很快就會成爲你的優先級,當你的代碼跨越1000行代碼)的唯一方法是僅具有gluseprogram,glbindbuffer,質地結合和onDrawFrame方法內的其他結合,始終緩存裏面onSurfaceCreated變量和onSurfaceChanged

+2

很好的回答。內部着色器中使用的屬性,制服和其他變量應緩存在init()方法中,而不是draw_Frame()方法。 – divyaSharma 2014-08-29 08:04:14

8

哪種方式更好?

想想吧。無論glGetUniformLocationglGetAttribLocation的速度有多快,他們不能不僅僅是取出一個變量更快。所以如果你關心性能,那麼使用總是更快的方法。

3

根據我的測試,取這樣的位置了約100〜200倍,它採用單個glDrawElements通話的時間量。這只是基於System.nanoTime()的估計值,但我認爲應該將它們存儲在初始化變量中值得保存。

+0

這是一個更好的答案。 (我希望數據當然是正確的,但我可以想象它是,因爲獲取屬性是同步的,並且繪圖不是)。 – 2017-09-23 16:12:05

相關問題