Browse Source

Add "combine" color mode, for colorizing images (see https://love2d.org/forums/viewtopic.php?f=4&t=7648 )

Bill Meltsner 13 years ago
parent
commit
8f781e9f13

+ 1 - 0
src/modules/graphics/Graphics.cpp

@@ -130,6 +130,7 @@ namespace graphics
 	{
 		{ "replace", Graphics::COLOR_REPLACE },
 		{ "modulate", Graphics::COLOR_MODULATE },
+		{ "combine", Graphics::COLOR_COMBINE },
 	};
 
 	StringMap<Graphics::ColorMode, Graphics::COLOR_MAX_ENUM> Graphics::colorModes(Graphics::colorModeEntries, sizeof(Graphics::colorModeEntries));

+ 1 - 0
src/modules/graphics/Graphics.h

@@ -62,6 +62,7 @@ namespace graphics
 		{
 			COLOR_MODULATE = 1,
 			COLOR_REPLACE,
+			COLOR_COMBINE,
 			COLOR_MAX_ENUM
 		};
 

+ 8 - 1
src/modules/graphics/opengl/Graphics.cpp

@@ -530,6 +530,11 @@ namespace opengl
 	{
 		if (mode == COLOR_MODULATE)
 			glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+		else if (mode == COLOR_COMBINE) {
+			glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_ADD_SIGNED);
+			glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_REPLACE);
+			glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
+		}
 		else // mode = COLOR_REPLACE
 			glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
 	}
@@ -567,7 +572,9 @@ namespace opengl
 
 		if (mode == GL_MODULATE)
 			return COLOR_MODULATE;
-		else // // mode == GL_REPLACE
+		else if (mode == GL_COMBINE)
+			return COLOR_COMBINE;
+		else // mode == GL_REPLACE
 			return COLOR_REPLACE;
 	}