Mik*_*ike 5 objective-c ios opengl-es-2.0
在顶点着色器中,当然允许有限量的统一存储,并且我理解不同的系统可以在编译代码方面以略微不同的方式实现GLSL.我听说过建议使用常量而不是在顶点着色器代码中写出文字.
例如,下列代码可推测导致可均匀存储的降低.(我不太明白.)
示例1:使用文字
vec4 myVector = vec4(1.0, 0.0, 0.0, 1.0);
Run Code Online (Sandbox Code Playgroud)
据我了解,每次使用1.0或0.0占用一定数量的统一存储空间都有可能.因此,建议将之前的代码转换为如下代码:
示例2:使用常量而不是文字
const float zero = 0.0;
const float one = 1.0;
vec4 myVector = vec4(one, zero, zero, one);
Run Code Online (Sandbox Code Playgroud)
有谁理解背后发生的争论?我没有任何代码问题,我只是想正确理解这些东西,以便将来我没有问题.
我的正式问题如下:特别是对于使用OpenGL ES 2.0的iOS平台,最好的做法是用文字(例子1)或用常量(例子2)写出东西.我应该每次都花时间用常量写出来的东西,还是应该写出文字,如果顶点着色器无法正确编译,我应该只使用常量?
谢谢!
\n\n\n就文字值而言,OpenGL ES 2.0 着色语言规范规定不假定恒定传播。这意味着相同文字值的多个实例将被计算多次。应声明适当的 const 变量,而不是使用文字值。这可以避免多次使用相同的文字值计数,如果顶点统一存储要求超出实现支持的范围,则可能会导致顶点着色器无法编译。
\n
我在实际规范中找不到与此相关的任何内容。此外,没有特定于 iOS 的信息。
\n\n您还可以检查为解决此问题(以及许多其他问题)而编写的GLSL 优化器工具。
\n| 归档时间: |
|
| 查看次数: |
524 次 |
| 最近记录: |