예제 #1
0
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;
}
예제 #2
0
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();
}