| /* |
| * Copyright 2012 Google Inc. |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| #ifndef GrSingleTextureEffect_DEFINED |
| #define GrSingleTextureEffect_DEFINED |
| |
| #include "GrEffect.h" |
| #include "SkMatrix.h" |
| #include "GrCoordTransform.h" |
| |
| class GrTexture; |
| |
| /** |
| * A base class for effects that draw a single texture with a texture matrix. This effect has no |
| * backend implementations. One must be provided by the subclass. |
| */ |
| class GrSingleTextureEffect : public GrEffect { |
| public: |
| virtual ~GrSingleTextureEffect(); |
| |
| protected: |
| /** unfiltered, clamp mode */ |
| GrSingleTextureEffect(GrTexture*, const SkMatrix&, GrCoordSet = kLocal_GrCoordSet); |
| /** clamp mode */ |
| GrSingleTextureEffect(GrTexture*, const SkMatrix&, GrTextureParams::FilterMode filterMode, |
| GrCoordSet = kLocal_GrCoordSet); |
| GrSingleTextureEffect(GrTexture*, |
| const SkMatrix&, |
| const GrTextureParams&, |
| GrCoordSet = kLocal_GrCoordSet); |
| |
| /** |
| * Helper for subclass onIsEqual() functions. |
| */ |
| bool hasSameTextureParamsMatrixAndSourceCoords(const GrSingleTextureEffect& other) const { |
| // We don't have to check the accesses' swizzles because they are inferred from the texture. |
| return fTextureAccess == other.fTextureAccess && |
| fCoordTransform.getMatrix().cheapEqualTo(other.fCoordTransform.getMatrix()) && |
| fCoordTransform.sourceCoords() == other.fCoordTransform.sourceCoords(); |
| } |
| |
| /** |
| * Can be used as a helper to implement subclass getConstantColorComponents(). It assumes that |
| * the subclass output color will be a modulation of the input color with a value read from the |
| * texture. |
| */ |
| void updateConstantColorComponentsForModulation(GrColor* color, uint32_t* validFlags) const { |
| if ((*validFlags & kA_GrColorComponentFlag) && 0xFF == GrColorUnpackA(*color) && |
| GrPixelConfigIsOpaque(this->texture(0)->config())) { |
| *validFlags = kA_GrColorComponentFlag; |
| } else { |
| *validFlags = 0; |
| } |
| } |
| |
| private: |
| GrCoordTransform fCoordTransform; |
| GrTextureAccess fTextureAccess; |
| |
| typedef GrEffect INHERITED; |
| }; |
| |
| #endif |