2012-08-03 33 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

相关问题