1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2013 Google Inc. 3*c8dee2aaSAndroid Build Coastguard Worker * 4*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be 5*c8dee2aaSAndroid Build Coastguard Worker * found in the LICENSE file. 6*c8dee2aaSAndroid Build Coastguard Worker */ 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard Worker #ifndef GrBitmapTextGeoProc_DEFINED 9*c8dee2aaSAndroid Build Coastguard Worker #define GrBitmapTextGeoProc_DEFINED 10*c8dee2aaSAndroid Build Coastguard Worker 11*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkMatrix.h" 12*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkRefCnt.h" 13*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkSize.h" 14*c8dee2aaSAndroid Build Coastguard Worker #include "include/private/SkColorData.h" 15*c8dee2aaSAndroid Build Coastguard Worker #include "src/base/SkArenaAlloc.h" 16*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/GrColorSpaceXform.h" 17*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/GrGeometryProcessor.h" 18*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/GrProcessorUnitTest.h" 19*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/GrSamplerState.h" 20*c8dee2aaSAndroid Build Coastguard Worker 21*c8dee2aaSAndroid Build Coastguard Worker #include <memory> 22*c8dee2aaSAndroid Build Coastguard Worker #include <utility> 23*c8dee2aaSAndroid Build Coastguard Worker 24*c8dee2aaSAndroid Build Coastguard Worker class GrSurfaceProxyView; 25*c8dee2aaSAndroid Build Coastguard Worker struct GrShaderCaps; 26*c8dee2aaSAndroid Build Coastguard Worker 27*c8dee2aaSAndroid Build Coastguard Worker namespace skgpu { 28*c8dee2aaSAndroid Build Coastguard Worker class KeyBuilder; 29*c8dee2aaSAndroid Build Coastguard Worker enum class MaskFormat : int; 30*c8dee2aaSAndroid Build Coastguard Worker } 31*c8dee2aaSAndroid Build Coastguard Worker 32*c8dee2aaSAndroid Build Coastguard Worker /** 33*c8dee2aaSAndroid Build Coastguard Worker * The output color of this effect is a modulation of the input color and a sample from a texture. 34*c8dee2aaSAndroid Build Coastguard Worker * It allows explicit specification of the filtering and wrap modes (GrSamplerState). The input 35*c8dee2aaSAndroid Build Coastguard Worker * coords are a custom attribute. 36*c8dee2aaSAndroid Build Coastguard Worker */ 37*c8dee2aaSAndroid Build Coastguard Worker class GrBitmapTextGeoProc : public GrGeometryProcessor { 38*c8dee2aaSAndroid Build Coastguard Worker public: 39*c8dee2aaSAndroid Build Coastguard Worker inline static constexpr int kMaxTextures = 4; 40*c8dee2aaSAndroid Build Coastguard Worker Make(SkArenaAlloc * arena,const GrShaderCaps & caps,const SkPMColor4f & color,bool wideColor,sk_sp<GrColorSpaceXform> colorSpaceXform,const GrSurfaceProxyView * views,int numActiveViews,GrSamplerState p,skgpu::MaskFormat format,const SkMatrix & localMatrix,bool usesW)41*c8dee2aaSAndroid Build Coastguard Worker static GrGeometryProcessor* Make(SkArenaAlloc* arena, 42*c8dee2aaSAndroid Build Coastguard Worker const GrShaderCaps& caps, 43*c8dee2aaSAndroid Build Coastguard Worker const SkPMColor4f& color, 44*c8dee2aaSAndroid Build Coastguard Worker bool wideColor, 45*c8dee2aaSAndroid Build Coastguard Worker sk_sp<GrColorSpaceXform> colorSpaceXform, 46*c8dee2aaSAndroid Build Coastguard Worker const GrSurfaceProxyView* views, 47*c8dee2aaSAndroid Build Coastguard Worker int numActiveViews, 48*c8dee2aaSAndroid Build Coastguard Worker GrSamplerState p, 49*c8dee2aaSAndroid Build Coastguard Worker skgpu::MaskFormat format, 50*c8dee2aaSAndroid Build Coastguard Worker const SkMatrix& localMatrix, 51*c8dee2aaSAndroid Build Coastguard Worker bool usesW) { 52*c8dee2aaSAndroid Build Coastguard Worker return arena->make([&](void* ptr) { 53*c8dee2aaSAndroid Build Coastguard Worker return new (ptr) GrBitmapTextGeoProc(caps, color, wideColor, std::move(colorSpaceXform), 54*c8dee2aaSAndroid Build Coastguard Worker views, numActiveViews, 55*c8dee2aaSAndroid Build Coastguard Worker p, format, localMatrix, usesW); 56*c8dee2aaSAndroid Build Coastguard Worker }); 57*c8dee2aaSAndroid Build Coastguard Worker } 58*c8dee2aaSAndroid Build Coastguard Worker ~GrBitmapTextGeoProc()59*c8dee2aaSAndroid Build Coastguard Worker ~GrBitmapTextGeoProc() override {} 60*c8dee2aaSAndroid Build Coastguard Worker name()61*c8dee2aaSAndroid Build Coastguard Worker const char* name() const override { return "BitmapText"; } 62*c8dee2aaSAndroid Build Coastguard Worker 63*c8dee2aaSAndroid Build Coastguard Worker void addNewViews(const GrSurfaceProxyView*, int numActiveViews, GrSamplerState); 64*c8dee2aaSAndroid Build Coastguard Worker 65*c8dee2aaSAndroid Build Coastguard Worker void addToKey(const GrShaderCaps& caps, skgpu::KeyBuilder* b) const override; 66*c8dee2aaSAndroid Build Coastguard Worker 67*c8dee2aaSAndroid Build Coastguard Worker std::unique_ptr<ProgramImpl> makeProgramImpl(const GrShaderCaps& caps) const override; 68*c8dee2aaSAndroid Build Coastguard Worker 69*c8dee2aaSAndroid Build Coastguard Worker private: 70*c8dee2aaSAndroid Build Coastguard Worker class Impl; 71*c8dee2aaSAndroid Build Coastguard Worker 72*c8dee2aaSAndroid Build Coastguard Worker GrBitmapTextGeoProc(const GrShaderCaps&, const SkPMColor4f&, bool wideColor, 73*c8dee2aaSAndroid Build Coastguard Worker sk_sp<GrColorSpaceXform> colorSpaceXform, 74*c8dee2aaSAndroid Build Coastguard Worker const GrSurfaceProxyView* views, int numViews, GrSamplerState params, 75*c8dee2aaSAndroid Build Coastguard Worker skgpu::MaskFormat format, const SkMatrix& localMatrix, bool usesW); 76*c8dee2aaSAndroid Build Coastguard Worker hasVertexColor()77*c8dee2aaSAndroid Build Coastguard Worker bool hasVertexColor() const { return fInColor.isInitialized(); } 78*c8dee2aaSAndroid Build Coastguard Worker onTextureSampler(int i)79*c8dee2aaSAndroid Build Coastguard Worker const TextureSampler& onTextureSampler(int i) const override { return fTextureSamplers[i]; } 80*c8dee2aaSAndroid Build Coastguard Worker 81*c8dee2aaSAndroid Build Coastguard Worker SkPMColor4f fColor; 82*c8dee2aaSAndroid Build Coastguard Worker sk_sp<GrColorSpaceXform> fColorSpaceXform; 83*c8dee2aaSAndroid Build Coastguard Worker SkMatrix fLocalMatrix; 84*c8dee2aaSAndroid Build Coastguard Worker bool fUsesW; 85*c8dee2aaSAndroid Build Coastguard Worker SkISize fAtlasDimensions; // dims for all textures used with fTextureSamplers 86*c8dee2aaSAndroid Build Coastguard Worker TextureSampler fTextureSamplers[kMaxTextures]; 87*c8dee2aaSAndroid Build Coastguard Worker Attribute fInPosition; 88*c8dee2aaSAndroid Build Coastguard Worker Attribute fInColor; 89*c8dee2aaSAndroid Build Coastguard Worker Attribute fInTextureCoords; 90*c8dee2aaSAndroid Build Coastguard Worker skgpu::MaskFormat fMaskFormat; 91*c8dee2aaSAndroid Build Coastguard Worker 92*c8dee2aaSAndroid Build Coastguard Worker GR_DECLARE_GEOMETRY_PROCESSOR_TEST 93*c8dee2aaSAndroid Build Coastguard Worker 94*c8dee2aaSAndroid Build Coastguard Worker using INHERITED = GrGeometryProcessor; 95*c8dee2aaSAndroid Build Coastguard Worker }; 96*c8dee2aaSAndroid Build Coastguard Worker 97*c8dee2aaSAndroid Build Coastguard Worker #endif 98