From d1a27666d996b3e441ef46ea1d74ec38d9dba5e4 Mon Sep 17 00:00:00 2001 From: Bastien Bouclet Date: Sat, 16 Jan 2016 08:02:13 +0100 Subject: [PATCH] GRAPHICS: Add a method to unbind the active shader --- graphics/opengles2/shader.cpp | 11 ++++++++--- graphics/opengles2/shader.h | 4 ++++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/graphics/opengles2/shader.cpp b/graphics/opengles2/shader.cpp index d3b101da4d6..7cf7eccf5c0 100644 --- a/graphics/opengles2/shader.cpp +++ b/graphics/opengles2/shader.cpp @@ -124,6 +124,8 @@ struct SharedPtrProgramDeleter { } }; +Shader* Shader::_previousShader = nullptr; + Shader::Shader(const Common::String &name, GLuint vertexShader, GLuint fragmentShader, const char **attributes) : _name(name) { assert(attributes); @@ -163,9 +165,8 @@ Shader *Shader::fromFiles(const char *vertex, const char *fragment, const char * } void Shader::use(bool forceReload) { - static Shader *previousShader = nullptr; static uint32 previousNumAttributes = 0; - if (this == previousShader && !forceReload) + if (this == _previousShader && !forceReload) return; // The previous shader might have had more attributes. Disable any extra ones. @@ -175,7 +176,7 @@ void Shader::use(bool forceReload) { } } - previousShader = this; + _previousShader = this; previousNumAttributes = _attributes.size(); glUseProgram(*_shaderNo); @@ -246,6 +247,10 @@ void Shader::disableVertexAttribute(const char *attrib, int size, const float *d va._const[i] = data[i]; } +void Shader::unbind() { + glUseProgram(0); + _previousShader = nullptr; +} } #endif diff --git a/graphics/opengles2/shader.h b/graphics/opengles2/shader.h index 64d74f489e4..fbeb9cfa7aa 100644 --- a/graphics/opengles2/shader.h +++ b/graphics/opengles2/shader.h @@ -143,6 +143,8 @@ public: static Shader* fromStrings(const Common::String &name, const char *vertex, const char *fragment, const char **attributes); + void unbind(); + private: Shader(const Common::String &name, GLuint vertexShader, GLuint fragmentShader, const char **attributes); @@ -155,6 +157,8 @@ private: Common::Array _attributes; Common::SharedPtr _uniforms; + + static Shader *_previousShader; }; }