在OpenG中启用/禁用Cg着色器时,正确的操作顺序

我已经开始编写一个在OpenGL中使用Cg着色器的Effect类,在使用Cg创建和渲染时,我对操作的顺序有点困惑。

目前,我的效果类包含CGprogram,CGprofile和一个CGparametervariables数组,这些variables在加载类似如下效果时被填充:

m_vertexProfile = cgGLGetLatesProfile(CG_GL_VERTEX); cgGLSetOptimalOptions(m_vertexProfile); m_vertexProgram = cgCreateProgramFromFile(g_cgContext, CG_SOURCE, fileName, m_vertexProfile, entryPointName, NULL); cgGLLoadProgram(m_vertexProgram);[/color] CGparameter param = cgGetFirstParameter(m_vertexProgram, CG_PROGRAM); while (param) { const char* paramName = cgGetParameterName(param); m_vertexParameters[m_vertexParamNum++] = param; param = cgGetNextParameter(param); } 

这不完全是这样的,这只是使用顶点着色器,但它包含重要的代码。 无论如何,这就是我如何创建效果,然后当我想在渲染过程中使用它,我使用Enable()和Disable()函数之前和之后绘制verts等。

 void Effect::Enable() { cgGLBindProgram(m_vertexProgram); cgGLEnableProfile(m_vertexProfile); } void Effect::Disable() { cgGLUnbindProgram(m_vertexProfile); cgGLDisableProfile(m_vertexProfile); } 

不过,我不确定这是否是正确的做法。 为每个着色器启用和禁用configuration文件是否正确? 更重要的是,我是否真的需要每个着色器的configuration文件? 我为每个着色器使用相同的configuration文件,所以当然我可以有一个全局的,并使用它?

任何意见将不胜感激。