StGLVarLocation StGLProgram::getUniformLocation(StGLContext& theCtx, const char* theVarName) const { if(!isValid()) { return StGLVarLocation(); } const StGLVarLocation aLocation(theCtx.core20fwd->glGetUniformLocation(myProgramId, theVarName)); #ifdef __ST_DEBUG__ if(!aLocation.isValid()) { ST_DEBUG_LOG("Warning! Uniform variable '" + theVarName + "' doesn't found in the whole shader!"); } #endif return aLocation; }
bool StGLStereoFrameBuffer::StGLStereoProgram::link(StGLContext& theCtx) { if(!StGLProgram::link(theCtx)) { return false; } StGLVarLocation uniTexLLoc = StGLProgram::getUniformLocation(theCtx, "texL"); StGLVarLocation uniTexRLoc = StGLProgram::getUniformLocation(theCtx, "texR"); atrVVertexLoc = StGLProgram::getAttribLocation(theCtx, "vVertex"); atrVTexCoordLoc = StGLProgram::getAttribLocation(theCtx, "vTexCoord"); if(uniTexLLoc.isValid() && uniTexRLoc.isValid()) { use(theCtx); theCtx.core20fwd->glUniform1i(uniTexLLoc, StGLProgram::TEXTURE_SAMPLE_0); // GL_TEXTURE0 in multitexture theCtx.core20fwd->glUniform1i(uniTexRLoc, StGLProgram::TEXTURE_SAMPLE_1); // GL_TEXTURE1 in multitexture unuse(theCtx); } return uniTexRLoc.isValid() && uniTexLLoc.isValid() && atrVVertexLoc.isValid() && atrVTexCoordLoc.isValid(); }