目前我正在学习如何在GLSL中为我正在开发的游戏引擎创建着色器,并且我对于困惑我的语言有疑问。我已经了解到,在着色器版本低于3.0的情况下,你不能在循环条件下使用统一变量。例如,以下代码在3.0以前的着色器版本中不起作用。GLSL break命令
for (int i = 0; i < uNumLights; i++)
{
...............
}
但是是不是可以用迭代的固定量与循环替换此,而是包含会打破循环,如果我,在这种情况下,比uNumLights大的条件语句?例如:
for (int i = 0; i < MAX_LIGHTS; i++)
{
if(i >= uNumLights)
break;
..............
}
这些不等于吗?后者是否应该用旧版本的GLSL?如果是这样,这不是比我已经阅读过的其他技术更高效,更容易实现,比如对不同数量的灯使用不同版本的着色器。
我知道这可能是一个愚蠢的问题,但我是一个初学者,我找不到一个原因,为什么这不应该工作。
目前我正在写一个旧显卡的着色器,它只支持着色器模型2.0。奇怪的是,第二个变体确实起作用,或者至少编译没有错误。至于功能,我不确定它是否在停止命令被触发时停止。第一个当然不会编译。 – 2011-02-05 18:37:42