OpenGL - 我应该存储属性/统一位置吗?

时间:2012-08-03 20:33:12

标签: opengl-es opengl-es-2.0

glGetUniformLocationglGetAttribLocation耗时吗?

哪种方式更好?

  1. 每次需要时拨打glGetAttribLocationglGetUniformLocation
  2. 将位置存储在可变数据中并在需要时使用它们?

3 个答案:

答案 0 :(得分:9)

  

哪种方式更好?

想一想。无论glGetUniformLocationglGetAttribLocation有多快,它们都不能比仅提取变量更快。因此,如果您关注性能,请使用始终更快的方法。

答案 1 :(得分:6)

无论是在Android还是iPhone上,对于opengl表面,您将拥有以下方法: onSurfaceCreated和onSurfaceChanged , 养成在这两种方法中获取制服和属性的习惯。

你可以更快地渲染渲染的唯一方法(当你的代码跨越1000行代码时很快会成为你的优先考虑)只有 gluseprogram,glbindbuffer,纹理绑定以及onDrawFrame方法中的其他绑定,始终在onSurfaceCreated和onSurfaceChanged中缓存变量

答案 2 :(得分:3)

根据我的测试,获取这些位置的时间大约是单次glDrawElements呼叫所需时间的100~200倍。这只是基于System.nanoTime()的估算值,但我认为可以说,在初始化时将它们存储在变量中是值得的。