diff --git a/src/modules/graphics/opengl/OpenGL.cpp b/src/modules/graphics/opengl/OpenGL.cpp index 0f6289b1a..0e1cc1276 100644 --- a/src/modules/graphics/opengl/OpenGL.cpp +++ b/src/modules/graphics/opengl/OpenGL.cpp @@ -41,6 +41,8 @@ void initializeContext() contextInitialized = true; + textureUnits.clear(); + // initialize multiple texture unit support, if available if (GLEE_ARB_multitexture || GLEE_VERSION_1_3) { @@ -57,7 +59,6 @@ void initializeContext() maxtextureunits = maxtextureimageunits; } - textureUnits.clear(); textureUnits.resize(maxtextureunits, 0); GLenum activetextureunit; @@ -83,7 +84,6 @@ void initializeContext() else { // multitexturing not supported so we only have 1 texture unit - textureUnits.clear(); textureUnits.resize(1, 0); curTextureUnitIndex = 0; diff --git a/src/modules/graphics/opengl/ShaderEffect.cpp b/src/modules/graphics/opengl/ShaderEffect.cpp index 938c6fd92..a026ba8c2 100644 --- a/src/modules/graphics/opengl/ShaderEffect.cpp +++ b/src/modules/graphics/opengl/ShaderEffect.cpp @@ -21,32 +21,6 @@ #include "ShaderEffect.h" #include "Graphics.h" -namespace -{ -// temporarily attaches a shader program (for setting uniforms, etc) -// reattaches the originally active program when destroyed -struct TemporaryAttacher -{ - TemporaryAttacher(love::graphics::opengl::ShaderEffect *sp) - : cureffect(sp) - , preveffect(love::graphics::opengl::ShaderEffect::current) - { - cureffect->attach(true); - } - - ~TemporaryAttacher() - { - if (preveffect != NULL) - preveffect->attach(); - else - love::graphics::opengl::ShaderEffect::detach(); - } - - love::graphics::opengl::ShaderEffect *cureffect; - love::graphics::opengl::ShaderEffect *preveffect; -}; -} // anonymous namespace - namespace love { namespace graphics @@ -54,6 +28,33 @@ namespace graphics namespace opengl { +namespace +{ + // temporarily attaches a shader program (for setting uniforms, etc) + // reattaches the originally active program when destroyed + struct TemporaryAttacher + { + TemporaryAttacher(ShaderEffect *sp) + : cureffect(sp) + , preveffect(ShaderEffect::current) + { + cureffect->attach(true); + } + + ~TemporaryAttacher() + { + if (preveffect != NULL) + preveffect->attach(); + else + ShaderEffect::detach(); + } + + ShaderEffect *cureffect; + ShaderEffect *preveffect; + }; +} // anonymous namespace + + ShaderEffect *ShaderEffect::current = NULL; GLint ShaderEffect::_max_texture_units = 0; diff --git a/src/modules/graphics/opengl/ShaderEffect.h b/src/modules/graphics/opengl/ShaderEffect.h index 3b85f4587..ff5453808 100644 --- a/src/modules/graphics/opengl/ShaderEffect.h +++ b/src/modules/graphics/opengl/ShaderEffect.h @@ -39,6 +39,7 @@ namespace opengl class ShaderEffect : public Object, public Volatile { public: + enum ShaderType { TYPE_VERTEX, @@ -78,6 +79,7 @@ public: void sendCanvas(const std::string &name, const Canvas &canvas); private: + GLint getUniformLocation(const std::string &name); void checkSetUniformError(); GLuint createShader(const ShaderSource &source); @@ -90,7 +92,7 @@ private: // uniform location buffer std::map _uniforms; - static GLint _max_texture_units; + static GLint _max_texture_units; // total max GPU texture units for shaders static std::vector _texture_id_counters; // counts total number of textures bound to each texture unit in all shaders // texture unit pool for setting images @@ -99,6 +101,7 @@ private: GLint getTextureUnit(const std::string &name); void sendTexture(const std::string &name, GLuint texture); + }; } // opengl diff --git a/src/modules/graphics/opengl/wrap_Graphics.cpp b/src/modules/graphics/opengl/wrap_Graphics.cpp index 297bfc150..fcd9af353 100644 --- a/src/modules/graphics/opengl/wrap_Graphics.cpp +++ b/src/modules/graphics/opengl/wrap_Graphics.cpp @@ -436,7 +436,7 @@ int w_newCanvas(lua_State *L) int w_newShaderEffect(lua_State *L) { if (!ShaderEffect::isSupported()) - return luaL_error(L, "Sorry, your graphics card does not support pixel effects."); + return luaL_error(L, "Sorry, your graphics card does not support shader effects."); try { diff --git a/src/scripts/graphics.lua b/src/scripts/graphics.lua index 0ec24fb2e..8d4b5e029 100644 --- a/src/scripts/graphics.lua +++ b/src/scripts/graphics.lua @@ -1305,6 +1305,7 @@ do #define VertexPosition gl_Vertex uniform sampler2D _tex0_; + #line 0]], FOOTER = [[ void main() { @@ -1331,6 +1332,7 @@ void main() { #define VaryingTexCoord gl_TexCoord[0] uniform sampler2D _tex0_; + #line 0]], FOOTER = [[ void main() {