//----------------------------------------------------------------------- void GLSLProgram::attachToProgramObject( const GLhandleARB programObject ) { glAttachObjectARB( programObject, mGLHandle ); checkForGLSLError( "GLSLLinkProgram::GLSLLinkProgram", "Error attaching " + mName + " shader object to GLSL Program Object", programObject ); // attach child objects GLSLProgramContainerIterator childprogramcurrent = mAttachedGLSLPrograms.begin(); GLSLProgramContainerIterator childprogramend = mAttachedGLSLPrograms.end(); while (childprogramcurrent != childprogramend) { GLSLProgram* childShader = *childprogramcurrent; // bug in ATI GLSL linker : modules without main function must be recompiled each time // they are linked to a different program object // don't check for compile errors since there won't be any // *** minor inconvenience until ATI fixes there driver childShader->compile(false); childShader->attachToProgramObject( programObject ); ++childprogramcurrent; } }
//----------------------------------------------------------------------- void GLSLProgram::attachToProgramObject( const GLuint programObject ) { // attach child objects GLSLProgramContainerIterator childprogramcurrent = mAttachedGLSLPrograms.begin(); GLSLProgramContainerIterator childprogramend = mAttachedGLSLPrograms.end(); while (childprogramcurrent != childprogramend) { GLSLProgram* childShader = *childprogramcurrent; // bug in ATI GLSL linker : modules without main function must be recompiled each time // they are linked to a different program object // don't check for compile errors since there won't be any // *** minor inconvenience until ATI fixes there driver childShader->compile(true); childShader->attachToProgramObject( programObject ); ++childprogramcurrent; } OGRE_CHECK_GL_ERROR(glAttachShader(programObject, mGLShaderHandle)); logObjectInfo( "Error attaching " + mName + " shader object to GLSL Program Object", programObject ); }