为什么我不能知道GLSL中OpenGL灯的状态?

R. *_*des 3 opengl shader glsl

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

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

我现在相信你不能这样做.但现在我问:为什么不呢?

小智 6

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

另外我想这可能是一个设计选择,基于分支在GPU上很昂贵的事实,有人必须认为你不应该这样做

if (gl_LightSource[0].enabled)
{ ... }
Run Code Online (Sandbox Code Playgroud)

首先.