1fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/* 2fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Copyright 2014 Google Inc. 3fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * 4fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Use of this source code is governed by a BSD-style license that can be 5fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * found in the LICENSE file. 6fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */ 7fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 8fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#ifndef SkPictureShader_DEFINED 9fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#define SkPictureShader_DEFINED 10fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 11fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkAtomics.h" 12fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkShaderBase.h" 13fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 14fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass SkArenaAlloc; 15fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass SkBitmap; 16fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass SkPicture; 17fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 18fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/* 19fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * An SkPictureShader can be used to draw SkPicture-based patterns. 20fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * 21fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * The SkPicture is first rendered into a tile, which is then used to shade the area according 22fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * to specified tiling rules. 23fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */ 24fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass SkPictureShader : public SkShaderBase { 25fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotpublic: 26fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot ~SkPictureShader() override; 27fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 28fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot static sk_sp<SkShader> Make(sk_sp<SkPicture>, TileMode, TileMode, const SkMatrix*, 29fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const SkRect*); 30fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 31fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SK_TO_STRING_OVERRIDE() 32fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkPictureShader) 33fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 34fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#if SK_SUPPORT_GPU 35fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot std::unique_ptr<GrFragmentProcessor> asFragmentProcessor(const GrFPArgs&) const override; 36fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#endif 37fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 38fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprotected: 39fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkPictureShader(SkReadBuffer&); 40fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot void flatten(SkWriteBuffer&) const override; 41fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot bool onAppendStages(const StageRec&) const override; 42fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot Context* onMakeContext(const ContextRec&, SkArenaAlloc*) const override; 43fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot sk_sp<SkShader> onMakeColorSpace(SkColorSpaceXformer* xformer) const override; 44fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot bool onIsRasterPipelineOnly(const SkMatrix&) const override; 45fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 46fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprivate: 47fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkPictureShader(sk_sp<SkPicture>, TileMode, TileMode, const SkMatrix*, const SkRect*, 48fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot sk_sp<SkColorSpace>); 49fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 50fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot sk_sp<SkShader> refBitmapShader(const SkMatrix&, const SkMatrix* localMatrix, 51fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkColorSpace* dstColorSpace, 52fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const int maxTextureSize = 0) const; 53fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 54fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot class PictureShaderContext : public Context { 55fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot public: 56fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot PictureShaderContext( 57fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const SkPictureShader&, const ContextRec&, sk_sp<SkShader> bitmapShader, SkArenaAlloc*); 58fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 59fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot uint32_t getFlags() const override; 60fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 61fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot void shadeSpan(int x, int y, SkPMColor dstC[], int count) override; 62fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 63fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot sk_sp<SkShader> fBitmapShader; 64fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkShaderBase::Context* fBitmapShaderContext; 65fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot void* fBitmapShaderContextStorage; 66fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 67fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot typedef Context INHERITED; 68fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot }; 69fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 70fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot sk_sp<SkPicture> fPicture; 71fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkRect fTile; 72fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot TileMode fTmx, fTmy; 73fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 74fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot // Should never be set by a public constructor. This is only used when onMakeColorSpace() 75fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot // forces a deferred color space xform. 76fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot sk_sp<SkColorSpace> fColorSpace; 77fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 78fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const uint32_t fUniqueID; 79fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot mutable SkAtomic<bool> fAddedToCache; 80fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 81fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot typedef SkShaderBase INHERITED; 82fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}; 83fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 84fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#endif // SkPictureShader_DEFINED 85