在顶点着色器中声明常量而不是文字.标准做法还是不必要的严谨?

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.00.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.0iOS平台,最好的做法是用文字(例子1)或用常量(例子2)写出东西.我应该每次都花时间用常量写出来的东西,还是应该写出文字,如果顶点着色器无法正确编译,我应该只使用常量?

谢谢!

Kim*_*imi 1

来自OpenGL\xc2\xae ES 2.0 编程指南

\n\n
\n

就文字值而言,OpenGL ES 2.0 着色语言规范规定不假定恒定传播。这意味着相同文字值的多个实例将被计算多次。应声明适当的 const 变量,而不是使用文字值。这可以避免多次使用相同的文字值计数,如果顶点统一存储要求超出实现支持的范围,则可能会导致顶点着色器无法编译。

\n
\n\n

我在实际规范中找不到与此相关的任何内容。此外,没有特定于 iOS 的信息。

\n\n

您还可以检查为解决此问题(以及许多其他问题)而编写的GLSL 优化器工具。

\n