| Index: include/gpu/GrEffect.h
|
| diff --git a/include/gpu/GrEffect.h b/include/gpu/GrEffect.h
|
| index 4dc294bfe8a1bbd49de162fe63b7dc1ba476f6f3..78752702f549bbd8296379e093e0e14ca428c06e 100644
|
| --- a/include/gpu/GrEffect.h
|
| +++ b/include/gpu/GrEffect.h
|
| @@ -16,6 +16,7 @@
|
|
|
| class GrBackendEffectFactory;
|
| class GrContext;
|
| +class GrCoordTransform;
|
| class GrEffect;
|
| class GrVertexEffect;
|
| class SkString;
|
| @@ -83,16 +84,6 @@ class GrEffect : private SkRefCnt {
|
| public:
|
| SK_DECLARE_INST_COUNT(GrEffect)
|
|
|
| - /**
|
| - * The types of vertex coordinates available to an effect in the vertex shader. Effects can
|
| - * require their own vertex attribute but these coordinates are made available by the framework
|
| - * in all programs.
|
| - */
|
| - enum CoordsType {
|
| - kLocal_CoordsType,
|
| - kPosition_CoordsType,
|
| - };
|
| -
|
| virtual ~GrEffect();
|
|
|
| /**
|
| @@ -138,6 +129,12 @@ public:
|
| in generated shader code. */
|
| const char* name() const;
|
|
|
| + int numTransforms() const { return fCoordTransforms.count(); }
|
| +
|
| + /** Returns the coordinate transformation at index. index must be valid according to
|
| + numTransforms(). */
|
| + const GrCoordTransform& coordTransform(int index) const { return *fCoordTransforms[index]; }
|
| +
|
| int numTextures() const { return fTextureAccesses.count(); }
|
|
|
| /** Returns the access pattern for the texture at index. index must be valid according to
|
| @@ -205,9 +202,18 @@ public:
|
|
|
| protected:
|
| /**
|
| + * Subclasses call this from their constructor to register coordinate transformations. The
|
| + * effect subclass manages the lifetime of the transformations (this function only stores a
|
| + * pointer). The GrCoordTransform is typically a member field of the GrEffect subclass. When the
|
| + * matrix has perspective, the transformed coordinates will have 3 components. Otherwise they'll
|
| + * have 2. This must only be called from the constructor because GrEffects are immutable.
|
| + */
|
| + void addCoordTransform(const GrCoordTransform* coordTransform);
|
| +
|
| + /**
|
| * Subclasses call this from their constructor to register GrTextureAccesses. The effect
|
| * subclass manages the lifetime of the accesses (this function only stores a pointer). The
|
| - * GrTextureAccess is typically a member field of the GrEffet subclass. This must only be
|
| + * GrTextureAccess is typically a member field of the GrEffect subclass. This must only be
|
| * called from the constructor because GrEffects are immutable.
|
| */
|
| void addTextureAccess(const GrTextureAccess* textureAccess);
|
| @@ -289,15 +295,14 @@ private:
|
| bool result = this->onIsEqual(other);
|
| #ifdef SK_DEBUG
|
| if (result) {
|
| - SkASSERT(this->numTextures() == other.numTextures());
|
| - for (int i = 0; i < this->numTextures(); ++i) {
|
| - SkASSERT(*fTextureAccesses[i] == *other.fTextureAccesses[i]);
|
| - }
|
| + this->assertEquality(other);
|
| }
|
| #endif
|
| return result;
|
| }
|
|
|
| + SkDEBUGCODE(void assertEquality(const GrEffect& other) const;)
|
| +
|
| /** Subclass implements this to support isEqual(). It will only be called if it is known that
|
| the two effects are of the same subclass (i.e. they return the same object from
|
| getFactory()).*/
|
| @@ -311,6 +316,7 @@ private:
|
| // to inc/dec deferred ref counts.
|
| friend class GrVertexEffect; // to set fHasVertexCode and build fVertexAttribTypes.
|
|
|
| + SkSTArray<4, const GrCoordTransform*, true> fCoordTransforms;
|
| SkSTArray<4, const GrTextureAccess*, true> fTextureAccesses;
|
| SkSTArray<kMaxVertexAttribs, GrSLType, true> fVertexAttribTypes;
|
| bool fWillReadDstColor;
|
|
|