diff --git a/src/celengine/glshader.cpp b/src/celengine/glshader.cpp index c8f7e6ac9..4ba547dbc 100644 --- a/src/celengine/glshader.cpp +++ b/src/celengine/glshader.cpp @@ -87,6 +87,24 @@ FloatShaderParameter::operator=(float f) } +Vec2ShaderParameter::Vec2ShaderParameter() : + slot(-1) +{ +} + +Vec2ShaderParameter::Vec2ShaderParameter(GLuint obj, const char* name) +{ + slot = glGetUniformLocation(obj, name); +} + +Vec2ShaderParameter& +Vec2ShaderParameter::operator=(const Eigen::Vector2f& v) +{ + if (slot != -1) + glUniform2fv(slot, 1, v.data()); + return *this; +} + Vec3ShaderParameter::Vec3ShaderParameter() : slot(-1) { diff --git a/src/celengine/glshader.h b/src/celengine/glshader.h index f0361de5c..2cd431778 100644 --- a/src/celengine/glshader.h +++ b/src/celengine/glshader.h @@ -98,6 +98,18 @@ class FloatShaderParameter }; +class Vec2ShaderParameter +{ + public: + Vec2ShaderParameter(); + Vec2ShaderParameter(GLuint obj, const char* name); + + Vec2ShaderParameter& operator=(const Eigen::Vector2f&); + + private: + int slot; +}; + class Vec3ShaderParameter { public: diff --git a/src/celengine/shadermanager.cpp b/src/celengine/shadermanager.cpp index d1e64e607..297f1582a 100644 --- a/src/celengine/shadermanager.cpp +++ b/src/celengine/shadermanager.cpp @@ -3495,6 +3495,12 @@ CelestiaGLProgram::samplerParam(const string& paramName) } +Vec2ShaderParameter +CelestiaGLProgram::vec2Param(const string& paramName) +{ + return Vec2ShaderParameter(program->getID(), paramName.c_str()); +} + Vec3ShaderParameter CelestiaGLProgram::vec3Param(const string& paramName) { diff --git a/src/celengine/shadermanager.h b/src/celengine/shadermanager.h index 64d97c750..90f5478f5 100644 --- a/src/celengine/shadermanager.h +++ b/src/celengine/shadermanager.h @@ -278,6 +278,7 @@ class CelestiaGLProgram FloatShaderParameter floatParam(const std::string&); IntegerShaderParameter intParam(const std::string&); IntegerShaderParameter samplerParam(const std::string&); + Vec2ShaderParameter vec2Param(const std::string&); Vec3ShaderParameter vec3Param(const std::string&); Vec4ShaderParameter vec4Param(const std::string&); Mat3ShaderParameter mat3Param(const std::string&);