diff options
author | Jim Van Verth <jvanverth@google.com> | 2017-09-12 11:54:11 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-09-12 17:16:00 +0000 |
commit | a950b63b442f1376d022740457b020ada62f6554 (patch) | |
tree | 8508e15a8ae8e6edc4fdba2d6e2273b5662e2add /src/gpu/effects/GrDistanceFieldGeoProc.h | |
parent | 2ab4b2b871c01aa3dd6d2e43883461c722f01680 (diff) |
Add support for additional textures in GrDrawOpAtlas
Step two in supporting growable/shrinkable atlases.
Bug: skia:3550
Change-Id: I0cdec2a9f59cc8ced071bfeec2f8ed5a228c4b7a
Reviewed-on: https://skia-review.googlesource.com/43260
Commit-Queue: Jim Van Verth <jvanverth@google.com>
Reviewed-by: Robert Phillips <robertphillips@google.com>
Diffstat (limited to 'src/gpu/effects/GrDistanceFieldGeoProc.h')
-rw-r--r-- | src/gpu/effects/GrDistanceFieldGeoProc.h | 37 |
1 files changed, 23 insertions, 14 deletions
diff --git a/src/gpu/effects/GrDistanceFieldGeoProc.h b/src/gpu/effects/GrDistanceFieldGeoProc.h index b1836dd9bb..b5c6f9eea6 100644 --- a/src/gpu/effects/GrDistanceFieldGeoProc.h +++ b/src/gpu/effects/GrDistanceFieldGeoProc.h @@ -50,22 +50,24 @@ enum GrDistanceFieldEffectFlags { */ class GrDistanceFieldA8TextGeoProc : public GrGeometryProcessor { public: + static constexpr int kMaxTextures = 4; + #ifdef SK_GAMMA_APPLY_TO_A8 static sk_sp<GrGeometryProcessor> Make(GrColor color, const SkMatrix& viewMatrix, - sk_sp<GrTextureProxy> proxy, + const sk_sp<GrTextureProxy> proxies[kMaxTextures], const GrSamplerState& params, float lum, uint32_t flags, bool usesLocalCoords) { return sk_sp<GrGeometryProcessor>( - new GrDistanceFieldA8TextGeoProc(color, viewMatrix, std::move(proxy), + new GrDistanceFieldA8TextGeoProc(color, viewMatrix, proxies, params, lum, flags, usesLocalCoords)); } #else static sk_sp<GrGeometryProcessor> Make(GrColor color, const SkMatrix& viewMatrix, - sk_sp<GrTextureProxy> proxy, + const sk_sp<GrTextureProxy> proxies[kMaxTextures], const GrSamplerState& params, uint32_t flags, bool usesLocalCoords) { return sk_sp<GrGeometryProcessor>( - new GrDistanceFieldA8TextGeoProc(color, viewMatrix, std::move(proxy), + new GrDistanceFieldA8TextGeoProc(color, viewMatrix, proxies, params, flags, usesLocalCoords)); } #endif @@ -90,7 +92,8 @@ public: GrGLSLPrimitiveProcessor* createGLSLInstance(const GrShaderCaps&) const override; private: - GrDistanceFieldA8TextGeoProc(GrColor, const SkMatrix& viewMatrix, sk_sp<GrTextureProxy> proxy, + GrDistanceFieldA8TextGeoProc(GrColor, const SkMatrix& viewMatrix, + const sk_sp<GrTextureProxy> proxies[kMaxTextures], const GrSamplerState& params, #ifdef SK_GAMMA_APPLY_TO_A8 float distanceAdjust, @@ -99,7 +102,7 @@ private: GrColor fColor; SkMatrix fViewMatrix; - TextureSampler fTextureSampler; + TextureSampler fTextureSamplers[kMaxTextures]; #ifdef SK_GAMMA_APPLY_TO_A8 float fDistanceAdjust; #endif @@ -122,12 +125,14 @@ private: */ class GrDistanceFieldPathGeoProc : public GrGeometryProcessor { public: + static constexpr int kMaxTextures = 4; + static sk_sp<GrGeometryProcessor> Make(GrColor color, const SkMatrix& viewMatrix, - sk_sp<GrTextureProxy> proxy, + const sk_sp<GrTextureProxy> proxies[kMaxTextures], const GrSamplerState& params, uint32_t flags, bool usesLocalCoords) { return sk_sp<GrGeometryProcessor>( - new GrDistanceFieldPathGeoProc(color, viewMatrix, std::move(proxy), + new GrDistanceFieldPathGeoProc(color, viewMatrix, proxies, params, flags, usesLocalCoords)); } @@ -148,12 +153,13 @@ public: GrGLSLPrimitiveProcessor* createGLSLInstance(const GrShaderCaps&) const override; private: - GrDistanceFieldPathGeoProc(GrColor, const SkMatrix& viewMatrix, sk_sp<GrTextureProxy>, + GrDistanceFieldPathGeoProc(GrColor, const SkMatrix& viewMatrix, + const sk_sp<GrTextureProxy> proxies[kMaxTextures], const GrSamplerState&, uint32_t flags, bool usesLocalCoords); GrColor fColor; SkMatrix fViewMatrix; - TextureSampler fTextureSampler; + TextureSampler fTextureSamplers[kMaxTextures]; uint32_t fFlags; const Attribute* fInPosition; const Attribute* fInColor; @@ -188,15 +194,17 @@ public: } }; + static constexpr int kMaxTextures = 4; + static sk_sp<GrGeometryProcessor> Make(GrColor color, const SkMatrix& viewMatrix, - sk_sp<GrTextureProxy> proxy, + const sk_sp<GrTextureProxy> proxies[kMaxTextures], const GrSamplerState& params, DistanceAdjust distanceAdjust, uint32_t flags, bool usesLocalCoords) { return sk_sp<GrGeometryProcessor>( - new GrDistanceFieldLCDTextGeoProc(color, viewMatrix, std::move(proxy), + new GrDistanceFieldLCDTextGeoProc(color, viewMatrix, proxies, params, distanceAdjust, flags, usesLocalCoords)); } @@ -219,13 +227,14 @@ public: GrGLSLPrimitiveProcessor* createGLSLInstance(const GrShaderCaps&) const override; private: - GrDistanceFieldLCDTextGeoProc(GrColor, const SkMatrix& viewMatrix, sk_sp<GrTextureProxy> proxy, + GrDistanceFieldLCDTextGeoProc(GrColor, const SkMatrix& viewMatrix, + const sk_sp<GrTextureProxy> proxies[kMaxTextures], const GrSamplerState& params, DistanceAdjust wa, uint32_t flags, bool usesLocalCoords); GrColor fColor; SkMatrix fViewMatrix; - TextureSampler fTextureSampler; + TextureSampler fTextureSamplers[kMaxTextures]; DistanceAdjust fDistanceAdjust; uint32_t fFlags; const Attribute* fInPosition; |