shader中uniform变量的if或for判断会降低帧率

案例代码下载:
http://download.csdn.net/detail/aiwusheng/8087083

注:以下内容和代码的测试平台(GPU)为高通Adreno 200、Adreno 203、Adreno 205。

测试手机为:
摩托罗拉(GPU为Adreno 200、android系统版本为2.2)
联想S820e(GPU为Adreno 203、android系统版本为4.1)
联想A600e(GPU为Adreno 203、android系统版本为4.0)
华为U8800(GPU为Adreno 205、android系统版本为2.3)

一、结论:

1、结论:

多个uniform变量、varying变量的if判断、for循环判断,造成了Opengl ES帧率的成倍降低。
(经测试已上列出的各厂商手机均存在这一问题,与android rom无关)

想要明白造成该情况的具体原因,必须要读高通Adreno GPU工作原理的文档了????????????

2、英伟达部分GPU存在同样问题:

英伟达GPU平台,遇到同样问题的同学http://www.zhihu.com/question/21523864

3、Uniform、varying解释:

  • Uniform(一致变量):
    由应用程序传递给“着色器”的只读常量数据。此外,Uniform变量存储在常量存储区,因此限制了 Uniform变量的个数。OpenGL ES 2.0 也规定了所有实现应该支持的顶点着色器 uniform 变量

你可能感兴趣的:(OpenGL,ES)