When applying a color matrix, unpremultiply the source, and premultiply
the result.
Review URL: http://codereview.appspot.com/5520046/
git-svn-id: http://skia.googlecode.com/svn/trunk@2969 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/gpu/GrGLProgram.cpp b/src/gpu/GrGLProgram.cpp
index ce87b85..4d733a9 100644
--- a/src/gpu/GrGLProgram.cpp
+++ b/src/gpu/GrGLProgram.cpp
@@ -373,7 +373,8 @@
*/
static void addColorMatrix(GrStringBuilder* fsCode, const char * outputVar,
const char* inColor) {
- fsCode->appendf("%s = %s * %s + %s;\n", outputVar, COL_MATRIX_UNI_NAME, inColor, COL_MATRIX_VEC_UNI_NAME);
+ fsCode->appendf("\t%s = %s * vec4(%s.rgb / %s.a, %s.a) + %s;\n", outputVar, COL_MATRIX_UNI_NAME, inColor, inColor, inColor, COL_MATRIX_VEC_UNI_NAME);
+ fsCode->appendf("\t%s.rgb *= %s.a;\n", outputVar, outputVar);
}
namespace {