|
1 /* |
|
2 * Copyright 2012 Google Inc. |
|
3 * |
|
4 * Use of this source code is governed by a BSD-style license that can be |
|
5 * found in the LICENSE file. |
|
6 */ |
|
7 |
|
8 #ifndef GrSingleTextureEffect_DEFINED |
|
9 #define GrSingleTextureEffect_DEFINED |
|
10 |
|
11 #include "GrEffect.h" |
|
12 #include "SkMatrix.h" |
|
13 #include "GrCoordTransform.h" |
|
14 |
|
15 class GrTexture; |
|
16 |
|
17 /** |
|
18 * A base class for effects that draw a single texture with a texture matrix. This effect has no |
|
19 * backend implementations. One must be provided by the subclass. |
|
20 */ |
|
21 class GrSingleTextureEffect : public GrEffect { |
|
22 public: |
|
23 virtual ~GrSingleTextureEffect(); |
|
24 |
|
25 protected: |
|
26 /** unfiltered, clamp mode */ |
|
27 GrSingleTextureEffect(GrTexture*, const SkMatrix&, GrCoordSet = kLocal_GrCoordSet); |
|
28 /** clamp mode */ |
|
29 GrSingleTextureEffect(GrTexture*, const SkMatrix&, GrTextureParams::FilterMode filterMode, |
|
30 GrCoordSet = kLocal_GrCoordSet); |
|
31 GrSingleTextureEffect(GrTexture*, |
|
32 const SkMatrix&, |
|
33 const GrTextureParams&, |
|
34 GrCoordSet = kLocal_GrCoordSet); |
|
35 |
|
36 /** |
|
37 * Helper for subclass onIsEqual() functions. |
|
38 */ |
|
39 bool hasSameTextureParamsMatrixAndSourceCoords(const GrSingleTextureEffect& other) const { |
|
40 // We don't have to check the accesses' swizzles because they are inferred from the texture. |
|
41 return fTextureAccess == other.fTextureAccess && |
|
42 fCoordTransform.getMatrix().cheapEqualTo(other.fCoordTransform.getMatrix()) && |
|
43 fCoordTransform.sourceCoords() == other.fCoordTransform.sourceCoords(); |
|
44 } |
|
45 |
|
46 /** |
|
47 * Can be used as a helper to implement subclass getConstantColorComponents(). It assumes that |
|
48 * the subclass output color will be a modulation of the input color with a value read from the |
|
49 * texture. |
|
50 */ |
|
51 void updateConstantColorComponentsForModulation(GrColor* color, uint32_t* validFlags) const { |
|
52 if ((*validFlags & kA_GrColorComponentFlag) && 0xFF == GrColorUnpackA(*color) && |
|
53 GrPixelConfigIsOpaque(this->texture(0)->config())) { |
|
54 *validFlags = kA_GrColorComponentFlag; |
|
55 } else { |
|
56 *validFlags = 0; |
|
57 } |
|
58 } |
|
59 |
|
60 private: |
|
61 GrCoordTransform fCoordTransform; |
|
62 GrTextureAccess fTextureAccess; |
|
63 |
|
64 typedef GrEffect INHERITED; |
|
65 }; |
|
66 |
|
67 #endif |