在GLSL中使用GL内部状态变量的常见做法是什么

时间:2014-05-26 21:50:27

标签: opengl glsl shader

我知道在编写GLSL时,着色器能够访问那些GL内部变量,例如

glNormal gl_NormalMatrix gl_ModelViewMatrix gl_Vertex

作为着色器中的统一数据。

但是,在使用这些GL内部变量时遇到了问题。例如,我假设我的着色器需要访问gl_ModelViewMatrix,在我的C代码中,我需要调用

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();   

但似乎像NVidia NSight这样的调试器不喜欢我的程序调用glMatrixMode(),而gDEDebugger将此函数标记为已弃用的函数。通过在我的代码中使用此函数将使NSight调试器无法调试着色器代码,因为它稍后仅支持openGL 4.x.与glNoraml类似,我假设如果我在着色器中使用它,那么我需要调用

glBegin()
glNormal3f();
glEnd();

我相信后来的openGL标准也将glBegin()/ glEnd()视为已弃用的函数。那么,是不是意味着我不应该在着色器中使用那些内部状态变量?或者还有另一种方法可以在C代码中初始化它?

我想编写跨平台友好的着色器代码,并且能够在没有太多修改的情况下在OpenGL,Op​​enGL ES和WebGL上运行。

0 个答案:

没有答案