3

有没有办法找出是否在 GLSL 中启用了不涉及传递属性或创建大量不同着色器的灯光?

使用 NVidia 的 C for Graphics (Cg) 怎么样?我可以用 Cg 做吗?

我现在确信你做不到。但现在我问:为什么不呢?

4

4 回答 4

6

根据我对GLSL 常见错误的“启用或不启用”部分的理解,这是一个哲学原因:着色器是为覆盖固定管道而编写的,因此它们不应该依赖于固定的管道状态。您必须为所需的每种功能使用不同的着色器。

另外我想这可能是一个设计选择,因为分支在 GPU 上很昂贵,而且有人一定认为你不应该做类似的事情

if (gl_LightSource[0].enabled)
{ ... }

首先。

于 2009-07-09T07:59:12.247 回答
3

unforgiven3 是对的——GLSL 不提供对固定管道启用状态的访问。您必须将其作为制服传递。

于 2009-06-05T23:39:56.410 回答
1

如果 GLSL 类似于 HLSL(DirectX 的等价物),我怀疑是这样,我认为您会被传递属性所困扰。

:-(

于 2009-06-03T19:25:17.900 回答
0

您可以将灯光颜色设置为 (0,0,0,0) 并在其上进行分支,或者让它在现在没有贡献的灯光上循环。

于 2009-06-24T09:55:03.830 回答