| Index: src/gpu/gl/GrGLProgramEffects.h
|
| diff --git a/src/gpu/gl/GrGLProgramEffects.h b/src/gpu/gl/GrGLProgramEffects.h
|
| index b74dc96c4b80f3f24eefed30fad9ec795a610a5d..f6f975ae4e76106a4c342e6b70d02248392657dc 100644
|
| --- a/src/gpu/gl/GrGLProgramEffects.h
|
| +++ b/src/gpu/gl/GrGLProgramEffects.h
|
| @@ -15,7 +15,9 @@
|
|
|
| class GrEffectStage;
|
| class GrGLProgramEffectsBuilder;
|
| +class GrGLVertexProgramEffectsBuilder;
|
| 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&);
|
|
|
| - ~GrGLProgramEffects();
|
| + virtual ~GrGLProgramEffects();
|
|
|
| /**
|
| * 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.
|
| @@ -94,13 +96,44 @@ public:
|
|
|
| typedef SkTArray<TextureSampler> TextureSamplerArray;
|
|
|
| -private:
|
| +protected:
|
| friend class GrGLProgramEffectsBuilder;
|
|
|
| - GrGLProgramEffects(int reserveCount, bool explicitLocalCoords)
|
| + GrGLProgramEffects(int reserveCount)
|
| : fGLEffects(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;
|
| + };
|
| +
|
| + SkTArray<GrGLEffect*> fGLEffects;
|
| + SkTArray<SkSTArray<4, Sampler, true> > fSamplers;
|
| +};
|
| +
|
| +/**
|
| + * This is a GrGLProgramEffects implementation that does coord transforms with the vertex shader.
|
| + */
|
| +class GrGLVertexProgramEffects : public GrGLProgramEffects {
|
| +public:
|
| + virtual void setData(GrGpuGL*,
|
| + const GrGLUniformManager&,
|
| + const GrEffectStage* effectStages[]) SK_OVERRIDE;
|
| +
|
| +private:
|
| + friend class GrGLVertexProgramEffectsBuilder;
|
| +
|
| + GrGLVertexProgramEffects(int reserveCount, bool explicitLocalCoords)
|
| + : INHERITED(reserveCount)
|
| , fTransforms(reserveCount)
|
| - , fSamplers(reserveCount)
|
| , fHasExplicitLocalCoords(explicitLocalCoords) {
|
| }
|
|
|
| @@ -109,11 +142,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;
|
| @@ -121,35 +149,51 @@ private:
|
| SkMatrix fCurrentValue;
|
| };
|
|
|
| - struct Sampler {
|
| - SkDEBUGCODE(Sampler() : fTextureUnit(-1) {})
|
| - UniformHandle fUniform;
|
| - int fTextureUnit;
|
| - };
|
| -
|
| - SkTArray<GrGLEffect*> fGLEffects;
|
| SkTArray<SkSTArray<2, Transform, true> > fTransforms;
|
| - SkTArray<SkSTArray<4, Sampler, true> > fSamplers;
|
| bool fHasExplicitLocalCoords;
|
| +
|
| + typedef GrGLProgramEffects INHERITED;
|
| };
|
|
|
| ////////////////////////////////////////////////////////////////////////////////
|
|
|
| /**
|
| - * This class is used to construct a GrGLProgramEffects.
|
| + * This is an abstract base class for constructing different types of GrGLProgramEffects objects.
|
| */
|
| class GrGLProgramEffectsBuilder {
|
| public:
|
| - GrGLProgramEffectsBuilder(GrGLShaderBuilder* builder, int reserveCount);
|
| -
|
| /**
|
| * Emits the effect's shader code, and stores the necessary uniforms internally.
|
| */
|
| - void emitEffect(const GrEffectStage&,
|
| - GrGLProgramEffects::EffectKey,
|
| - const char* outColor,
|
| - const char* inColor,
|
| - int stageIndex);
|
| + virtual void emitEffect(const GrEffectStage&,
|
| + GrGLProgramEffects::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*,
|
| + GrGLProgramEffects*,
|
| + const GrEffectRef&,
|
| + GrGLProgramEffects::TextureSamplerArray*);
|
| +};
|
| +
|
| +/**
|
| + * This class is used to construct a GrGLVertexProgramEffects object.
|
| + */
|
| +class GrGLVertexProgramEffectsBuilder : public GrGLProgramEffectsBuilder {
|
| +public:
|
| + GrGLVertexProgramEffectsBuilder(GrGLFullShaderBuilder*, int reserveCount);
|
| +
|
| + virtual void emitEffect(const GrEffectStage&,
|
| + GrGLProgramEffects::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
|
| @@ -174,16 +218,10 @@ private:
|
| GrGLProgramEffects::EffectKey,
|
| GrGLProgramEffects::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&,
|
| - GrGLProgramEffects::TextureSamplerArray*);
|
| + GrGLFullShaderBuilder* fBuilder;
|
| + SkAutoTDelete<GrGLVertexProgramEffects> fProgramEffects;
|
|
|
| - GrGLShaderBuilder* fBuilder;
|
| - SkAutoTDelete<GrGLProgramEffects> fProgramEffects;
|
| + typedef GrGLProgramEffectsBuilder INHERITED;
|
| };
|
|
|
| #endif
|
|
|