1c5d9bb0f677069f62ec76373b9730e70e7352455commit-bot@chromium.org/* 2c5d9bb0f677069f62ec76373b9730e70e7352455commit-bot@chromium.org * Copyright 2014 Google Inc. 3c5d9bb0f677069f62ec76373b9730e70e7352455commit-bot@chromium.org * 4c5d9bb0f677069f62ec76373b9730e70e7352455commit-bot@chromium.org * Use of this source code is governed by a BSD-style license that can be 5c5d9bb0f677069f62ec76373b9730e70e7352455commit-bot@chromium.org * found in the LICENSE file. 6c5d9bb0f677069f62ec76373b9730e70e7352455commit-bot@chromium.org */ 7c5d9bb0f677069f62ec76373b9730e70e7352455commit-bot@chromium.org 8c5d9bb0f677069f62ec76373b9730e70e7352455commit-bot@chromium.org#ifndef SkPictureShader_DEFINED 9c5d9bb0f677069f62ec76373b9730e70e7352455commit-bot@chromium.org#define SkPictureShader_DEFINED 10c5d9bb0f677069f62ec76373b9730e70e7352455commit-bot@chromium.org 11c5d9bb0f677069f62ec76373b9730e70e7352455commit-bot@chromium.org#include "SkShader.h" 12c5d9bb0f677069f62ec76373b9730e70e7352455commit-bot@chromium.org 13c5d9bb0f677069f62ec76373b9730e70e7352455commit-bot@chromium.orgclass SkBitmap; 14c5d9bb0f677069f62ec76373b9730e70e7352455commit-bot@chromium.orgclass SkPicture; 15c5d9bb0f677069f62ec76373b9730e70e7352455commit-bot@chromium.org 16c5d9bb0f677069f62ec76373b9730e70e7352455commit-bot@chromium.org/* 17c5d9bb0f677069f62ec76373b9730e70e7352455commit-bot@chromium.org * An SkPictureShader can be used to draw SkPicture-based patterns. 18c5d9bb0f677069f62ec76373b9730e70e7352455commit-bot@chromium.org * 19c5d9bb0f677069f62ec76373b9730e70e7352455commit-bot@chromium.org * The SkPicture is first rendered into a tile, which is then used to shade the area according 20c5d9bb0f677069f62ec76373b9730e70e7352455commit-bot@chromium.org * to specified tiling rules. 21c5d9bb0f677069f62ec76373b9730e70e7352455commit-bot@chromium.org */ 22c5d9bb0f677069f62ec76373b9730e70e7352455commit-bot@chromium.orgclass SkPictureShader : public SkShader { 23c5d9bb0f677069f62ec76373b9730e70e7352455commit-bot@chromium.orgpublic: 24b5f7826c51af2862aebcabe61e1ba684f925e488fmalita static SkPictureShader* Create(const SkPicture*, TileMode, TileMode, const SkMatrix*, 25b5f7826c51af2862aebcabe61e1ba684f925e488fmalita const SkRect*); 26f47e70712b964b5360a3fec9e5e84bb594fc1f02fmalita virtual ~SkPictureShader(); 27c5d9bb0f677069f62ec76373b9730e70e7352455commit-bot@chromium.org 2836352bf5e38f45a70ee4f4fc132a38048d38206dmtklein size_t contextSize() const override; 29c5d9bb0f677069f62ec76373b9730e70e7352455commit-bot@chromium.org 30c5d9bb0f677069f62ec76373b9730e70e7352455commit-bot@chromium.org SK_TO_STRING_OVERRIDE() 31c5d9bb0f677069f62ec76373b9730e70e7352455commit-bot@chromium.org SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkPictureShader) 32c5d9bb0f677069f62ec76373b9730e70e7352455commit-bot@chromium.org 335531d51ce7426bdae7563547326fcf0bf926a083joshualitt bool asFragmentProcessor(GrContext*, const SkPaint&, const SkMatrix& viewM, const SkMatrix*, 3436352bf5e38f45a70ee4f4fc132a38048d38206dmtklein GrColor*, GrFragmentProcessor**) const override; 35c5d9bb0f677069f62ec76373b9730e70e7352455commit-bot@chromium.org 36c5d9bb0f677069f62ec76373b9730e70e7352455commit-bot@chromium.orgprotected: 37c5d9bb0f677069f62ec76373b9730e70e7352455commit-bot@chromium.org SkPictureShader(SkReadBuffer&); 3836352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void flatten(SkWriteBuffer&) const override; 3936352bf5e38f45a70ee4f4fc132a38048d38206dmtklein Context* onCreateContext(const ContextRec&, void* storage) const override; 40c5d9bb0f677069f62ec76373b9730e70e7352455commit-bot@chromium.org 41c5d9bb0f677069f62ec76373b9730e70e7352455commit-bot@chromium.orgprivate: 42b5f7826c51af2862aebcabe61e1ba684f925e488fmalita SkPictureShader(const SkPicture*, TileMode, TileMode, const SkMatrix*, const SkRect*); 43c5d9bb0f677069f62ec76373b9730e70e7352455commit-bot@chromium.org 44b9ed8845783ec3c59b2b185d26801f251adbf68dgen.kim SkShader* refBitmapShader(const SkMatrix&, const SkMatrix* localMatrix, const int maxTextureSize = 0) const; 45c5d9bb0f677069f62ec76373b9730e70e7352455commit-bot@chromium.org 46f47e70712b964b5360a3fec9e5e84bb594fc1f02fmalita const SkPicture* fPicture; 47f47e70712b964b5360a3fec9e5e84bb594fc1f02fmalita SkRect fTile; 48f47e70712b964b5360a3fec9e5e84bb594fc1f02fmalita TileMode fTmx, fTmy; 49c5d9bb0f677069f62ec76373b9730e70e7352455commit-bot@chromium.org 50ce56d965069c1649afe14319cb239e6ad670682acommit-bot@chromium.org class PictureShaderContext : public SkShader::Context { 51ce56d965069c1649afe14319cb239e6ad670682acommit-bot@chromium.org public: 52ce56d965069c1649afe14319cb239e6ad670682acommit-bot@chromium.org static Context* Create(void* storage, const SkPictureShader&, const ContextRec&, 53ce56d965069c1649afe14319cb239e6ad670682acommit-bot@chromium.org SkShader* bitmapShader); 54ce56d965069c1649afe14319cb239e6ad670682acommit-bot@chromium.org 55ce56d965069c1649afe14319cb239e6ad670682acommit-bot@chromium.org virtual ~PictureShaderContext(); 56edda70e020630103270c815b7499e8b02271875dskia.committer@gmail.com 5736352bf5e38f45a70ee4f4fc132a38048d38206dmtklein uint32_t getFlags() const override; 58edda70e020630103270c815b7499e8b02271875dskia.committer@gmail.com 5936352bf5e38f45a70ee4f4fc132a38048d38206dmtklein ShadeProc asAShadeProc(void** ctx) override; 6036352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void shadeSpan(int x, int y, SkPMColor dstC[], int count) override; 6136352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void shadeSpan16(int x, int y, uint16_t dstC[], int count) override; 62edda70e020630103270c815b7499e8b02271875dskia.committer@gmail.com 63ce56d965069c1649afe14319cb239e6ad670682acommit-bot@chromium.org private: 64ce56d965069c1649afe14319cb239e6ad670682acommit-bot@chromium.org PictureShaderContext(const SkPictureShader&, const ContextRec&, SkShader* bitmapShader); 65ce56d965069c1649afe14319cb239e6ad670682acommit-bot@chromium.org 66ce56d965069c1649afe14319cb239e6ad670682acommit-bot@chromium.org SkAutoTUnref<SkShader> fBitmapShader; 67ce56d965069c1649afe14319cb239e6ad670682acommit-bot@chromium.org SkShader::Context* fBitmapShaderContext; 68ce56d965069c1649afe14319cb239e6ad670682acommit-bot@chromium.org void* fBitmapShaderContextStorage; 69edda70e020630103270c815b7499e8b02271875dskia.committer@gmail.com 70ce56d965069c1649afe14319cb239e6ad670682acommit-bot@chromium.org typedef SkShader::Context INHERITED; 71ce56d965069c1649afe14319cb239e6ad670682acommit-bot@chromium.org }; 72edda70e020630103270c815b7499e8b02271875dskia.committer@gmail.com 73c5d9bb0f677069f62ec76373b9730e70e7352455commit-bot@chromium.org typedef SkShader INHERITED; 74c5d9bb0f677069f62ec76373b9730e70e7352455commit-bot@chromium.org}; 75c5d9bb0f677069f62ec76373b9730e70e7352455commit-bot@chromium.org 76c5d9bb0f677069f62ec76373b9730e70e7352455commit-bot@chromium.org#endif // SkPictureShader_DEFINED 77