//////////////////////////////////////////////////////////// /// \brief Constructor: set up state before uniform is set /// //////////////////////////////////////////////////////////// UniformBinder(Shader& shader, const std::string& name) : savedProgram(0), currentProgram(castToGlHandle(shader.m_shaderProgram)), location(-1) { if (currentProgram) { ensureGlContext(); // Enable program object glCheck(savedProgram = GLEXT_glGetHandle(GLEXT_GL_PROGRAM_OBJECT)); if (currentProgram != savedProgram) glCheck(GLEXT_glUseProgramObject(currentProgram)); // Store uniform location for further use outside constructor location = shader.getUniformLocation(name); } }
void Shader::setParameter(const std::string& name, const Transform& transform) { if (m_shaderProgram) { ensureGlContext(); // Enable program GLEXT_GLhandle program; glCheck(program = GLEXT_glGetHandle(GLEXT_GL_PROGRAM_OBJECT)); glCheck(GLEXT_glUseProgramObject(castToGlHandle(m_shaderProgram))); // Get parameter location and assign it new values GLint location = getParamLocation(name); if (location != -1) { glCheck(GLEXT_glUniformMatrix4fv(location, 1, GL_FALSE, transform.getMatrix())); } // Disable program glCheck(GLEXT_glUseProgramObject(program)); } }
void Shader::setParameter(const std::string& name, float x, float y, float z, float w) { if (m_shaderProgram) { ensureGlContext(); // Enable program GLEXT_GLhandle program; glCheck(program = GLEXT_glGetHandle(GLEXT_GL_PROGRAM_OBJECT)); glCheck(GLEXT_glUseProgramObject(castToGlHandle(m_shaderProgram))); // Get parameter location and assign it new values GLint location = getParamLocation(name); if (location != -1) { glCheck(GLEXT_glUniform4f(location, x, y, z, w)); } // Disable program glCheck(GLEXT_glUseProgramObject(program)); } }