Index: globalincs/def_files.cpp
===================================================================
--- globalincs/def_files.cpp	(revision 11296)
+++ globalincs/def_files.cpp	(working copy)
@@ -1348,9 +1348,7 @@
 "#ifdef FLAG_DIFFUSE_MAP\n"
 "uniform sampler2D sBasemap;\n"
 "uniform int desaturate;\n"
-"uniform float desaturate_r;\n"
-"uniform float desaturate_g;\n"
-"uniform float desaturate_b;\n"
+"uniform vec3 desaturate_clr;\n"
 "#endif\n"
 "#ifdef FLAG_GLOW_MAP\n"
 "uniform sampler2D sGlowmap;\n"
@@ -1569,13 +1567,7 @@
 "	}\n"
 " #else\n"
 "	#ifdef FLAG_DIFFUSE_MAP\n"
-"		if(desaturate == 1) {\n"
-"			float intensity = 0.0;\n"
-"			intensity = (fragmentColor.r + fragmentColor.g + fragmentColor.b)/3.0;\n"
-"			float alpha = fragmentColor.a;\n"
-"			fragmentColor = vec4(desaturate_r, desaturate_g, desaturate_b, 1.0) * intensity;\n"
-"			fragmentColor.a = alpha;\n"
-"		}\n"
+"	fragmentColor.rgb = mix(fragmentColor.rgb, desaturate_clr * dot(vec3(1.0), fragmentColor.rgb) * 0.3333333, float(desaturate));\n"
 "	#endif\n"
 "	gl_FragColor = fragmentColor;\n"
 " #endif\n"
Index: graphics/gropenglshader.cpp
===================================================================
--- graphics/gropenglshader.cpp	(revision 11296)
+++ graphics/gropenglshader.cpp	(working copy)
@@ -47,7 +47,7 @@
 static opengl_shader_uniform_reference_t GL_Uniform_Reference_Main[] = {
 	{ SDR_FLAG_LIGHT,		1, {"n_lights"}, 0, { NULL }, "Lighting" },
 	{ SDR_FLAG_FOG,			0, { NULL }, 0, { NULL }, "Fog Effect" },
-	{ SDR_FLAG_DIFFUSE_MAP, 5, {"sBasemap", "desaturate", "desaturate_r", "desaturate_g", "desaturate_b"}, 0, { NULL }, "Diffuse Mapping"},
+	{ SDR_FLAG_DIFFUSE_MAP, 3, {"sBasemap", "desaturate", "desaturate_clr"}, 0, { NULL }, "Diffuse Mapping"},
 	{ SDR_FLAG_GLOW_MAP,	1, {"sGlowmap"}, 0, { NULL }, "Glow Mapping" },
 	{ SDR_FLAG_SPEC_MAP,	1, {"sSpecmap"}, 0, { NULL }, "Specular Mapping" },
 	{ SDR_FLAG_NORMAL_MAP,	1, {"sNormalmap"}, 0, { NULL }, "Normal Mapping" },
Index: graphics/gropengltnl.cpp
===================================================================
--- graphics/gropengltnl.cpp	(revision 11296)
+++ graphics/gropengltnl.cpp	(working copy)
@@ -715,9 +715,8 @@
 		}
 
 		vglUniform1iARB( opengl_shader_get_uniform("desaturate"), desaturate);
-		vglUniform1fARB( opengl_shader_get_uniform("desaturate_r"), gr_screen.current_color.red/255.0f);
-		vglUniform1fARB( opengl_shader_get_uniform("desaturate_g"), gr_screen.current_color.green/255.0f);
-		vglUniform1fARB( opengl_shader_get_uniform("desaturate_b"), gr_screen.current_color.blue/255.0f);
+		vglUniform3fARB( opengl_shader_get_uniform("desaturate_clr"), 
+			gr_screen.current_color.red/255.0f, gr_screen.current_color.green/255.0f, gr_screen.current_color.blue/255.0f);
 
 		gr_opengl_tcache_set(gr_screen.current_bitmap, tmap_type, &u_scale, &v_scale, render_pass);
 	
