aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--gm/colormatrix.cpp13
-rw-r--r--src/gpu/GrGLProgram.cpp3
2 files changed, 15 insertions, 1 deletions
diff --git a/gm/colormatrix.cpp b/gm/colormatrix.cpp
index 7d57b3278b..0a4acfd84f 100644
--- a/gm/colormatrix.cpp
+++ b/gm/colormatrix.cpp
@@ -90,6 +90,19 @@ protected:
matrix.setYUV2RGB();
filter->setMatrix(matrix);
canvas->drawBitmap(fBitmap, 80, 160, &paint);
+
+ SkScalar s1 = SK_Scalar1;
+ SkScalar s255 = SkIntToScalar(255);
+ // Move red into alpha, set color to white
+ SkScalar data[20] = {
+ 0, 0, 0, 0, s255,
+ 0, 0, 0, 0, s255,
+ 0, 0, 0, 0, s255,
+ s1, 0, 0, 0, 0,
+ };
+
+ filter->setArray(data);
+ canvas->drawBitmap(fBitmap, 160, 160, &paint);
}
private:
diff --git a/src/gpu/GrGLProgram.cpp b/src/gpu/GrGLProgram.cpp
index ce87b857af..4d733a9df7 100644
--- a/src/gpu/GrGLProgram.cpp
+++ b/src/gpu/GrGLProgram.cpp
@@ -373,7 +373,8 @@ static void addColorFilter(GrStringBuilder* fsCode, const char * outputVar,
*/
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 {