aboutsummaryrefslogtreecommitdiffhomepage
path: root/gm
diff options
context:
space:
mode:
authorGravatar Florin Malita <fmalita@chromium.org>2018-02-06 16:49:40 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2018-02-06 22:13:05 +0000
commit18f7e0a19c1c49047f3f57c79852c7fd62918365 (patch)
tree0c947e69ae11ea9b5ec9adad2064a463ae2d7333 /gm
parent133bc33330d3e131a641d08cdfbf383c14c86c30 (diff)
Fix picture shader handling of outer local matrix
Instead of applying local matrices to the cached shader, pass them explicitly/composed to createContext/appendStages/asFragmentProcessor. Change-Id: I39aaf07ac883094c447c4e03e2ef9dcf8de13555 Reviewed-on: https://skia-review.googlesource.com/104580 Commit-Queue: Florin Malita <fmalita@chromium.org> Reviewed-by: Mike Reed <reed@google.com>
Diffstat (limited to 'gm')
-rw-r--r--gm/pictureshader.cpp39
1 files changed, 25 insertions, 14 deletions
diff --git a/gm/pictureshader.cpp b/gm/pictureshader.cpp
index bc98d80d1c..df91a33cce 100644
--- a/gm/pictureshader.cpp
+++ b/gm/pictureshader.cpp
@@ -25,10 +25,10 @@ static struct {
class PictureShaderGM : public skiagm::GM {
public:
- PictureShaderGM(SkScalar tileSize, SkScalar sceneSize)
+ PictureShaderGM(SkScalar tileSize, SkScalar sceneSize, bool useLocalMatrixWrapper = false)
: fTileSize(tileSize)
- , fSceneSize(sceneSize) {
- }
+ , fSceneSize(sceneSize)
+ , fUseLocalMatrixWrapper(useLocalMatrixWrapper) {}
protected:
void onOnceBeforeDraw() override {
@@ -47,7 +47,7 @@ public:
SkString onShortName() override {
- return SkString("pictureshader");
+ return SkStringPrintf("pictureshader%s", fUseLocalMatrixWrapper ? "_localwrapper" : "");
}
SkISize onISize() override {
@@ -151,32 +151,43 @@ private:
canvas->drawRect(SkRect::MakeWH(fSceneSize, fSceneSize), paint);
canvas->drawRect(SkRect::MakeXYWH(fSceneSize * 1.1f, 0, fSceneSize, fSceneSize), paint);
- paint.setShader(SkShader::MakePictureShader(fPicture, kTileConfigs[tileMode].tmx,
- kTileConfigs[tileMode].tmy, &localMatrix,
- nullptr));
+ auto pictureShader = SkShader::MakePictureShader(fPicture, kTileConfigs[tileMode].tmx,
+ kTileConfigs[tileMode].tmy,
+ fUseLocalMatrixWrapper
+ ? nullptr : &localMatrix,
+ nullptr);
+ paint.setShader(fUseLocalMatrixWrapper
+ ? pictureShader->makeWithLocalMatrix(localMatrix)
+ : pictureShader);
canvas->drawRect(SkRect::MakeWH(fSceneSize, fSceneSize), paint);
canvas->translate(fSceneSize * 1.1f, 0);
- paint.setShader(SkShader::MakeBitmapShader(fBitmap,
- kTileConfigs[tileMode].tmx,
- kTileConfigs[tileMode].tmy,
- &localMatrix));
+ auto bitmapShader = SkShader::MakeBitmapShader(fBitmap,
+ kTileConfigs[tileMode].tmx,
+ kTileConfigs[tileMode].tmy,
+ fUseLocalMatrixWrapper
+ ? nullptr : &localMatrix);
+ paint.setShader(fUseLocalMatrixWrapper
+ ? bitmapShader->makeWithLocalMatrix(localMatrix)
+ : bitmapShader);
canvas->drawRect(SkRect::MakeWH(fSceneSize, fSceneSize), paint);
canvas->restore();
}
- SkScalar fTileSize;
- SkScalar fSceneSize;
-
sk_sp<SkPicture> fPicture;
SkBitmap fBitmap;
+ SkScalar fTileSize;
+ SkScalar fSceneSize;
+ bool fUseLocalMatrixWrapper;
+
typedef GM INHERITED;
};
DEF_GM(return new PictureShaderGM(50, 100);)
+DEF_GM(return new PictureShaderGM(50, 100, true);)
DEF_SIMPLE_GM(tiled_picture_shader, canvas, 400, 400) {
// https://code.google.com/p/skia/issues/detail?id=3398