From d0278dad159c6e1a720c4fa467c65a2e911b05e7 Mon Sep 17 00:00:00 2001 From: Maciej Suminski Date: Wed, 3 Jul 2013 13:08:43 +0200 Subject: [PATCH] Shaders can handle integer parameters (uniforms). --- common/gal/opengl/shader.cpp | 12 ++++++++++-- include/gal/opengl/shader.h | 6 ++++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/common/gal/opengl/shader.cpp b/common/gal/opengl/shader.cpp index 693e0596ac..27b11b25b7 100644 --- a/common/gal/opengl/shader.cpp +++ b/common/gal/opengl/shader.cpp @@ -117,7 +117,7 @@ bool SHADER::Link() } -void SHADER::AddParameter( const std::string& aParameterName ) +int SHADER::AddParameter( const std::string& aParameterName ) { GLint location = glGetUniformLocation( programNumber, aParameterName.c_str() ); @@ -125,15 +125,23 @@ void SHADER::AddParameter( const std::string& aParameterName ) { parameterLocation.push_back( location ); } + + return location; } -void SHADER::SetParameter( int parameterNumber, float value ) +void SHADER::SetParameter( int parameterNumber, float value ) const { glUniform1f( parameterLocation[parameterNumber], value ); } +void SHADER::SetParameter( int parameterNumber, int value ) const +{ + glUniform1i( parameterLocation[parameterNumber], value ); +} + + int SHADER::GetAttribute( std::string aAttributeName ) const { return glGetAttribLocation( programNumber, aAttributeName.c_str() ); diff --git a/include/gal/opengl/shader.h b/include/gal/opengl/shader.h index 9e94d9b406..b9dcbf88ba 100644 --- a/include/gal/opengl/shader.h +++ b/include/gal/opengl/shader.h @@ -141,8 +141,9 @@ public: * method using the queue position. * * @param aParameterName is the name of the parameter. + * @return the added parameter location. */ - void AddParameter( const std::string& aParameterName ); + int AddParameter( const std::string& aParameterName ); /** * @brief Set a parameter of the shader. @@ -150,7 +151,8 @@ public: * @param aParameterNumber is the number of the parameter. * @param aValue is the value of the parameter. */ - void SetParameter( int aParameterNumber, float aValue ); + void SetParameter( int aParameterNumber, float aValue ) const; + void SetParameter( int aParameterNumber, int aValue ) const; /** * @brief Gets an attribute location.