Browse Source

Add love.graphics.getPixelEffect() (issue #372) -- thanks, slime73!

vrld 13 years ago
parent
commit
e02a2679c2

+ 4 - 0
src/modules/graphics/opengl/PixelEffect.cpp

@@ -44,6 +44,8 @@ namespace graphics
 {
 namespace opengl
 {
+	PixelEffect * PixelEffect::current = NULL;
+
 	std::map<std::string, GLint> PixelEffect::_texture_unit_pool;
 	GLint PixelEffect::_current_texture_unit = 0;
 	GLint PixelEffect::_max_texture_units = 0;
@@ -180,11 +182,13 @@ namespace opengl
 	void PixelEffect::attach()
 	{
 		glUseProgram(_program);
+		current = this;
 	}
 
 	void PixelEffect::detach()
 	{
 		glUseProgram(0);
+		current = NULL;
 	}
 
 	void PixelEffect::sendFloat(const std::string& name, int size, const GLfloat* vec, int count)

+ 2 - 0
src/modules/graphics/opengl/PixelEffect.h

@@ -49,6 +49,8 @@ namespace opengl
 		static void detach();
 		static std::string getGLSLVersion();
 		static bool isSupported();
+		
+		static PixelEffect * current;
 
 		void sendFloat(const std::string& name, int size, const GLfloat* vec, int count);
 		void sendMatrix(const std::string& name, int size, const GLfloat* m, int count);

+ 15 - 0
src/modules/graphics/opengl/wrap_Graphics.cpp

@@ -754,6 +754,20 @@ namespace opengl
 		effect->attach();
 		return 0;
 	}
+	
+	int w_getPixelEffect(lua_State * L)
+	{
+		PixelEffect * effect = PixelEffect::current;
+		if (effect)
+		{
+			effect->retain();
+			luax_newtype(L, "PixelEffect", GRAPHICS_PIXELEFFECT_T, (void*) effect);
+		}
+		else
+			lua_pushnil(L);
+		
+		return 1;
+	}
 
 	int w_isSupported(lua_State * L)
 	{
@@ -1214,6 +1228,7 @@ namespace opengl
 		{ "getCanvas", w_getCanvas },
 
 		{ "setPixelEffect", w_setPixelEffect },
+		{ "getPixelEffect", w_getPixelEffect },
 
 		{ "isSupported", w_isSupported },