diff options
-rw-r--r-- | libs/hwui/SkiaShader.cpp | 10 | ||||
-rw-r--r-- | tests/HwAccelerationTest/src/com/android/test/hwui/MoreShadersActivity.java | 13 |
2 files changed, 19 insertions, 4 deletions
diff --git a/libs/hwui/SkiaShader.cpp b/libs/hwui/SkiaShader.cpp index 9013fd5..c38eedb 100644 --- a/libs/hwui/SkiaShader.cpp +++ b/libs/hwui/SkiaShader.cpp @@ -411,8 +411,14 @@ void SkiaComposeShader::describe(ProgramDescription& description, const Extensio void SkiaComposeShader::setupProgram(Program* program, const mat4& modelView, const Snapshot& snapshot, GLuint* textureUnit) { - mFirst->setupProgram(program, modelView, snapshot, textureUnit); - mSecond->setupProgram(program, modelView, snapshot, textureUnit); + // Apply this compose shader's local transform and pass it down to + // the child shaders. They will in turn apply their local transform + // to this matrix. + mat4 transform; + computeScreenSpaceMatrix(transform, modelView); + + mFirst->setupProgram(program, transform, snapshot, textureUnit); + mSecond->setupProgram(program, transform, snapshot, textureUnit); } }; // namespace uirenderer diff --git a/tests/HwAccelerationTest/src/com/android/test/hwui/MoreShadersActivity.java b/tests/HwAccelerationTest/src/com/android/test/hwui/MoreShadersActivity.java index 02cb4b6..1847f43 100644 --- a/tests/HwAccelerationTest/src/com/android/test/hwui/MoreShadersActivity.java +++ b/tests/HwAccelerationTest/src/com/android/test/hwui/MoreShadersActivity.java @@ -57,6 +57,7 @@ public class MoreShadersActivity extends Activity { private Paint mLargePaint; private BitmapShader mScaled2Shader; private ColorFilter mColorFilter; + private final Matrix mMtx1; ShadersView(Context c) { super(c); @@ -70,7 +71,7 @@ public class MoreShadersActivity extends Activity { mScaledShader = new BitmapShader(texture, Shader.TileMode.MIRROR, Shader.TileMode.MIRROR); Matrix m2 = new Matrix(); - m2.setScale(0.5f, 0.5f); + m2.setScale(0.1f, 0.1f); mScaledShader.setLocalMatrix(m2); mScaled2Shader = new BitmapShader(texture, Shader.TileMode.MIRROR, @@ -81,12 +82,20 @@ public class MoreShadersActivity extends Activity { mHorGradient = new LinearGradient(0.0f, 0.0f, mDrawWidth, 0.0f, Color.RED, 0x7f00ff00, Shader.TileMode.CLAMP); - + Matrix m4 = new Matrix(); + m4.setScale(0.5f, 0.5f); + mHorGradient.setLocalMatrix(m4); + mVertGradient = new LinearGradient(0.0f, 0.0f, 0.0f, mDrawHeight / 2.0f, Color.YELLOW, Color.MAGENTA, Shader.TileMode.MIRROR); mComposeShader = new ComposeShader(mScaledShader, mHorGradient, PorterDuff.Mode.SRC_OVER); + mMtx1 = new Matrix(); + mMtx1.setTranslate(mTexWidth / 2.0f, mTexHeight / 2.0f); + mMtx1.postRotate(45, 0, 0); + mComposeShader.setLocalMatrix(mMtx1); + mCompose2Shader = new ComposeShader(mHorGradient, mScaledShader, PorterDuff.Mode.SRC_OUT); |