| Index: src/gpu/gl/GrGLEffectArray.h
|
| diff --git a/src/gpu/gl/GrGLEffectArray.h b/src/gpu/gl/GrGLEffectArray.h
|
| index 49f712fccd0d21f9876a89db0716b0b74e8949dd..0a7f26e6f062ae2d414a0aa929010b2a5eabf6b4 100644
|
| --- a/src/gpu/gl/GrGLEffectArray.h
|
| +++ b/src/gpu/gl/GrGLEffectArray.h
|
| @@ -15,7 +15,9 @@
|
|
|
| class GrEffectStage;
|
| class GrGLEffectArrayBuilder;
|
| +class GrGLVertexEffectArrayBuilder;
|
| class GrGLShaderBuilder;
|
| +class GrGLFullShaderBuilder;
|
|
|
| /**
|
| * This class encapsulates an array of GrGLEffects and their supporting data (coord transforms
|
| @@ -34,7 +36,7 @@ public:
|
| static EffectKey GenTransformKey(const GrDrawEffect&);
|
| static EffectKey GenTextureKey(const GrDrawEffect&, const GrGLCaps&);
|
|
|
| - ~GrGLEffectArray() { fGLEffects.deleteAll(); }
|
| + virtual ~GrGLEffectArray() { fGLEffects.deleteAll(); }
|
|
|
| /**
|
| * Assigns a texture unit to each sampler. It starts on *texUnitIdx and writes the next
|
| @@ -45,9 +47,9 @@ public:
|
| /**
|
| * Calls setData() on each effect, and sets their transformation matrices and texture bindings.
|
| */
|
| - void setData(GrGpuGL*,
|
| - const GrGLUniformManager&,
|
| - const GrEffectStage* effectStages[]);
|
| + virtual void setData(GrGpuGL*,
|
| + const GrGLUniformManager&,
|
| + const GrEffectStage* effectStages[]) = 0;
|
|
|
| /**
|
| * Passed to GrGLEffects so they can add transformed coordinates to their shader code.
|
| @@ -97,12 +99,44 @@ public:
|
|
|
| typedef SkTArray<TextureSampler> TextureSamplerArray;
|
|
|
| -private:
|
| +protected:
|
| friend class GrGLEffectArrayBuilder;
|
|
|
| - GrGLEffectArray(int reserveCount, bool explicitLocalCoords)
|
| - : fTransforms(reserveCount)
|
| - , fSamplers(reserveCount)
|
| + GrGLEffectArray(int reserveCount) : fSamplers(reserveCount) {}
|
| +
|
| + /**
|
| + * Helper for setData(). Binds all the textures for an effect.
|
| + */
|
| + void bindTextures(GrGpuGL*, const GrEffectRef&, int effectIdx);
|
| +
|
| + struct Sampler {
|
| + SkDEBUGCODE(Sampler() : fTextureUnit(-1) {})
|
| + UniformHandle fUniform;
|
| + int fTextureUnit;
|
| + };
|
| +
|
| + SkTDArray<GrGLEffect*> fGLEffects;
|
| + SkTArray<SkSTArray<4, Sampler, true> > fSamplers;
|
| +};
|
| +
|
| +/**
|
| + * This is a GrGLEffectArray implementation that does coord transforms with the vertex shader.
|
| + */
|
| +class GrGLVertexEffectArray : public GrGLEffectArray {
|
| +public:
|
| + /**
|
| + * Calls setData() on each effect, and sets their transformation matrices and texture bindings.
|
| + */
|
| + virtual void setData(GrGpuGL*,
|
| + const GrGLUniformManager&,
|
| + const GrEffectStage* effectStages[]) SK_OVERRIDE;
|
| +
|
| +private:
|
| + friend class GrGLVertexEffectArrayBuilder;
|
| +
|
| + GrGLVertexEffectArray(int reserveCount, bool explicitLocalCoords)
|
| + : INHERITED(reserveCount)
|
| + , fTransforms(reserveCount)
|
| , fHasExplicitLocalCoords(explicitLocalCoords) {
|
| }
|
|
|
| @@ -111,11 +145,6 @@ private:
|
| */
|
| void setTransformData(const GrGLUniformManager&, const GrDrawEffect&, int effectIdx);
|
|
|
| - /**
|
| - * Helper for setData(). Binds all the textures for an effect.
|
| - */
|
| - void bindTextures(GrGpuGL*, const GrEffectRef&, int effectIdx);
|
| -
|
| struct Transform {
|
| Transform() { fCurrentValue = SkMatrix::InvalidMatrix(); }
|
| UniformHandle fHandle;
|
| @@ -123,16 +152,10 @@ private:
|
| SkMatrix fCurrentValue;
|
| };
|
|
|
| - struct Sampler {
|
| - SkDEBUGCODE(Sampler() : fTextureUnit(-1) {})
|
| - UniformHandle fUniform;
|
| - int fTextureUnit;
|
| - };
|
| -
|
| - SkTDArray<GrGLEffect*> fGLEffects;
|
| SkTArray<SkSTArray<2, Transform, true> > fTransforms;
|
| - SkTArray<SkSTArray<4, Sampler, true> > fSamplers;
|
| bool fHasExplicitLocalCoords;
|
| +
|
| + typedef GrGLEffectArray INHERITED;
|
| };
|
|
|
| ////////////////////////////////////////////////////////////////////////////////
|
| @@ -142,16 +165,38 @@ private:
|
| */
|
| class GrGLEffectArrayBuilder {
|
| public:
|
| - GrGLEffectArrayBuilder(GrGLShaderBuilder* builder, int reserveCount);
|
| -
|
| /**
|
| * Emits the effect's shader code, and stores the necessary uniforms internally.
|
| */
|
| - void emitEffect(const GrEffectStage&,
|
| - GrGLEffectArray::EffectKey,
|
| - const char* outColor,
|
| - const char* inColor,
|
| - int stageIndex);
|
| + virtual void emitEffect(const GrEffectStage&,
|
| + GrGLEffectArray::EffectKey,
|
| + const char* outColor,
|
| + const char* inColor,
|
| + int stageIndex) = 0;
|
| +
|
| +protected:
|
| + /**
|
| + * Helper for emitEffect(). Emits uniforms for an effect's texture accesses and appends the
|
| + * necessary data to the TextureSamplerArray* object so effects can add texture lookups.
|
| + */
|
| + static void emitSamplers(GrGLShaderBuilder*,
|
| + GrGLEffectArray*,
|
| + const GrEffectRef&,
|
| + GrGLEffectArray::TextureSamplerArray*);
|
| +};
|
| +
|
| +/**
|
| + * This class is used by GrGLFullShaderBuilder to construct a GrGLVertexEffectArray.
|
| + */
|
| +class GrGLVertexEffectArrayBuilder : public GrGLEffectArrayBuilder {
|
| +public:
|
| + GrGLVertexEffectArrayBuilder(GrGLFullShaderBuilder*, int reserveCount);
|
| +
|
| + virtual void emitEffect(const GrEffectStage&,
|
| + GrGLEffectArray::EffectKey,
|
| + const char* outColor,
|
| + const char* inColor,
|
| + int stageIndex) SK_OVERRIDE;
|
|
|
| /**
|
| * Finalizes the building process and returns the effect array. After this call, the builder
|
| @@ -176,16 +221,10 @@ private:
|
| GrGLEffectArray::EffectKey,
|
| GrGLEffectArray::TransformedCoordsArray*);
|
|
|
| - /**
|
| - * Helper for emitEffect(). Emits uniforms for an effect's texture accesses. The uniform info
|
| - * as well as texture access parameters are appended to the TextureSamplerArray* object, which
|
| - * is in turn passed to the effect's emitCode() function.
|
| - */
|
| - void emitSamplers(const GrEffectRef&,
|
| - GrGLEffectArray::TextureSamplerArray*);
|
| + GrGLFullShaderBuilder* fBuilder;
|
| + SkAutoTDelete<GrGLVertexEffectArray> fEffectArray;
|
|
|
| - GrGLShaderBuilder* fBuilder;
|
| - SkAutoTDelete<GrGLEffectArray> fEffectArray;
|
| + typedef GrGLEffectArrayBuilder INHERITED;
|
| };
|
|
|
| #endif
|
|
|