Merge "Apply ComposeShader's local matrix to children" into jb-mr2-dev

This commit is contained in:
Romain Guy
2013-03-19 02:31:34 +00:00
committed by Android (Google) Code Review
2 changed files with 19 additions and 4 deletions

View File

@@ -411,8 +411,14 @@ void SkiaComposeShader::describe(ProgramDescription& description, const Extensio
void SkiaComposeShader::setupProgram(Program* program, const mat4& modelView, void SkiaComposeShader::setupProgram(Program* program, const mat4& modelView,
const Snapshot& snapshot, GLuint* textureUnit) { const Snapshot& snapshot, GLuint* textureUnit) {
mFirst->setupProgram(program, modelView, snapshot, textureUnit); // Apply this compose shader's local transform and pass it down to
mSecond->setupProgram(program, modelView, snapshot, textureUnit); // 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 }; // namespace uirenderer

View File

@@ -57,6 +57,7 @@ public class MoreShadersActivity extends Activity {
private Paint mLargePaint; private Paint mLargePaint;
private BitmapShader mScaled2Shader; private BitmapShader mScaled2Shader;
private ColorFilter mColorFilter; private ColorFilter mColorFilter;
private final Matrix mMtx1;
ShadersView(Context c) { ShadersView(Context c) {
super(c); super(c);
@@ -70,7 +71,7 @@ public class MoreShadersActivity extends Activity {
mScaledShader = new BitmapShader(texture, Shader.TileMode.MIRROR, mScaledShader = new BitmapShader(texture, Shader.TileMode.MIRROR,
Shader.TileMode.MIRROR); Shader.TileMode.MIRROR);
Matrix m2 = new Matrix(); Matrix m2 = new Matrix();
m2.setScale(0.5f, 0.5f); m2.setScale(0.1f, 0.1f);
mScaledShader.setLocalMatrix(m2); mScaledShader.setLocalMatrix(m2);
mScaled2Shader = new BitmapShader(texture, Shader.TileMode.MIRROR, 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, mHorGradient = new LinearGradient(0.0f, 0.0f, mDrawWidth, 0.0f,
Color.RED, 0x7f00ff00, Shader.TileMode.CLAMP); 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, mVertGradient = new LinearGradient(0.0f, 0.0f, 0.0f, mDrawHeight / 2.0f,
Color.YELLOW, Color.MAGENTA, Shader.TileMode.MIRROR); Color.YELLOW, Color.MAGENTA, Shader.TileMode.MIRROR);
mComposeShader = new ComposeShader(mScaledShader, mHorGradient, mComposeShader = new ComposeShader(mScaledShader, mHorGradient,
PorterDuff.Mode.SRC_OVER); 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, mCompose2Shader = new ComposeShader(mHorGradient, mScaledShader,
PorterDuff.Mode.SRC_OUT); PorterDuff.Mode.SRC_OUT);