grA*_*uit 5 android glsl vertex-shader opengl-es-2.0 libgdx
我在这个问题上请求了关于OpenGL ES 2.0问题的帮助.似乎答案对我来说很奇怪.因此,我决定提出这个问题,希望能够理解正在发生的事情.
这是一个有缺陷的顶点着色器代码:
// a bunch of uniforms and stuff...
uniform int u_lights_active;
void main()
{
// some code...
for ( int i = 0; i < u_lights_active; ++i )
{
// do some stuff using u_lights_active
}
// some other code...
}
Run Code Online (Sandbox Code Playgroud)
我知道这看起来很奇怪,但这实际上是解释问题/错误行为所需的所有代码.
我的问题是:当我为u_lights_active传递一个大于0的值时,为什么循环没有被执行?当我硬编码一些整数,例如4,而不是使用统一的u_lights_active,它工作得很好.
还有一件事,这只出现在Android上,但不出现在桌面上.我使用LibGDX在两个平台上运行相同的代码.
如果需要更多信息,您可以查看原始问题,但我不想复制并粘贴所有内容.我希望这种保持简短的方法是值得赞赏的,否则我会把所有的东西都复制一遍.
我期待着一个解释:)
谢谢!
P.T*_*.T. 11
基本上,GLSL指定实现可以限制循环对它们具有"常量"界限.这是为了简化优化代码并行运行(不同像素的不同循环计数会很复杂).我相信在一些实现中,常量甚至必须很小.请注意,规范只是指定了"最小"行为,因此某些设备可能支持比规范要求更复杂的循环控制.
以下是约束的一个很好的总结:http: //www.khronos.org/webgl/public-mailing-list/archives/1012/msg00063.html
这是GLSL规范(见附录A第4节):http: //www.khronos.org/registry/gles/specs/2.0/GLSL_ES_Specification_1.0.17.pdf
| 归档时间: |
|
| 查看次数: |
2946 次 |
| 最近记录: |