| Index: src/gpu/gl/GrGLShaderBuilder.h
|
| diff --git a/src/gpu/gl/GrGLShaderBuilder.h b/src/gpu/gl/GrGLShaderBuilder.h
|
| index 90f1a94ea3982e35114df6dba50b82942931d5fb..f3a63af9ed9ae5c773a20ee5e7c929c30979d1b5 100644
|
| --- a/src/gpu/gl/GrGLShaderBuilder.h
|
| +++ b/src/gpu/gl/GrGLShaderBuilder.h
|
| @@ -70,7 +70,7 @@ public:
|
| };
|
|
|
| static bool GenProgram(GrGpuGL* gpu,
|
| - GrGLUniformManager& uman,
|
| + GrGLUniformManager* uman,
|
| const GrGLProgramDesc& desc,
|
| const GrEffectStage* inColorStages[],
|
| const GrEffectStage* inCoverageStages[],
|
| @@ -174,7 +174,7 @@ public:
|
| const char** outName = NULL);
|
|
|
| const GrGLShaderVar& getUniformVariable(GrGLUniformManager::UniformHandle u) const {
|
| - return fUniformManager.getBuilderUniform(fUniforms, u).fVariable;
|
| + return fUniformManager->getBuilderUniform(fUniforms, u).fVariable;
|
| }
|
|
|
| /**
|
| @@ -195,51 +195,10 @@ public:
|
| is in device space (e.g. 0,0 is the top left and pixel centers are at half-integers). */
|
| const char* fragmentPosition();
|
|
|
| - /** Returns the color of the destination pixel. This may be NULL if no effect advertised
|
| - that it will read the destination. */
|
| + /** Returns the variable name that holds the color of the destination pixel. This may be NULL if
|
| + no effect advertised that it will read the destination. */
|
| const char* dstColor();
|
|
|
| - /**
|
| - * Interfaces used by GrGLProgram.
|
| - */
|
| - const GrGLSLExpr4& getInputColor() const {
|
| - return fInputColor;
|
| - }
|
| - const GrGLSLExpr4& getInputCoverage() const {
|
| - return fInputCoverage;
|
| - }
|
| -
|
| - /**
|
| - * Adds code for effects and returns a GrGLProgramEffects* object. The caller is responsible for
|
| - * deleting it when finished. effectStages contains the effects to add. effectKeys[i] is the key
|
| - * generated from effectStages[i]. inOutFSColor specifies the input color to the first stage and
|
| - * is updated to be the output color of the last stage.
|
| - * The handles to texture samplers for effectStage[i] are added to
|
| - * effectSamplerHandles[i].
|
| - */
|
| - virtual GrGLProgramEffects* createAndEmitEffects(const GrEffectStage* effectStages[],
|
| - const EffectKey effectKeys[],
|
| - int effectCnt,
|
| - GrGLSLExpr4* inOutFSColor) = 0;
|
| -
|
| - const char* getColorOutputName() const;
|
| - const char* enableSecondaryOutput();
|
| -
|
| - GrGLUniformManager::UniformHandle getRTHeightUniform() const { return fRTHeightUniform; }
|
| - GrGLUniformManager::UniformHandle getDstCopyTopLeftUniform() const {
|
| - return fDstCopyTopLeftUniform;
|
| - }
|
| - GrGLUniformManager::UniformHandle getDstCopyScaleUniform() const {
|
| - return fDstCopyScaleUniform;
|
| - }
|
| - GrGLUniformManager::UniformHandle getColorUniform() const { return fColorUniform; }
|
| - GrGLUniformManager::UniformHandle getCoverageUniform() const { return fCoverageUniform; }
|
| - GrGLUniformManager::UniformHandle getDstCopySamplerUniform() const {
|
| - return fDstCopySamplerUniform;
|
| - }
|
| -
|
| - bool finish(GrGLuint* outProgramId);
|
| -
|
| const GrGLContextInfo& ctxInfo() const;
|
|
|
| /**
|
| @@ -262,7 +221,7 @@ public:
|
| };
|
|
|
| protected:
|
| - GrGLShaderBuilder(GrGpuGL*, GrGLUniformManager&, const GrGLProgramDesc&);
|
| + GrGLShaderBuilder(GrGpuGL*, GrGLUniformManager*, const GrGLProgramDesc&);
|
|
|
| GrGpuGL* gpu() const { return fGpu; }
|
|
|
| @@ -274,11 +233,6 @@ protected:
|
| /** Add input/output variable declarations (i.e. 'varying') to the fragment shader. */
|
| GrGLShaderVar& fsInputAppend() { return fFSInputs.push_back(); }
|
|
|
| - // Generates a name for a variable. The generated string will be name prefixed by the prefix
|
| - // char (unless the prefix is '\0'). It also mangles the name to be stage-specific if we're
|
| - // generating stage code.
|
| - void nameVariable(SkString* out, char prefix, const char* name);
|
| -
|
| // Helper for emitEffects().
|
| void createAndEmitEffects(GrGLProgramEffectsBuilder*,
|
| const GrEffectStage* effectStages[],
|
| @@ -286,7 +240,13 @@ protected:
|
| int effectCnt,
|
| GrGLSLExpr4* inOutFSColor);
|
|
|
| + // Generates a name for a variable. The generated string will be name prefixed by the prefix
|
| + // char (unless the prefix is '\0'). It also mangles the name to be stage-specific if we're
|
| + // generating stage code.
|
| + void nameVariable(SkString* out, char prefix, const char* name);
|
| +
|
| virtual bool compileAndAttachShaders(GrGLuint programId, SkTDArray<GrGLuint>* shaderIds) const;
|
| +
|
| virtual void bindProgramLocations(GrGLuint programId) const;
|
|
|
| void appendDecls(const VarArray&, SkString*) const;
|
| @@ -349,6 +309,35 @@ private:
|
| GenProgramOutput* output);
|
|
|
| /**
|
| + * Adds code for effects and returns a GrGLProgramEffects* object. The caller is responsible for
|
| + * deleting it when finished. effectStages contains the effects to add. effectKeys[i] is the key
|
| + * generated from effectStages[i]. inOutFSColor specifies the input color to the first stage and
|
| + * is updated to be the output color of the last stage.
|
| + * The handles to texture samplers for effectStage[i] are added to
|
| + * effectSamplerHandles[i].
|
| + */
|
| + virtual GrGLProgramEffects* createAndEmitEffects(const GrEffectStage* effectStages[],
|
| + const EffectKey effectKeys[],
|
| + int effectCnt,
|
| + GrGLSLExpr4* inOutFSColor) = 0;
|
| +
|
| + /** Enables using the secondary color output and returns the name of the var in which it is
|
| + to be stored */
|
| + const char* enableSecondaryOutput();
|
| + /** Gets the name of the primary color output. */
|
| + const char* getColorOutputName() const;
|
| +
|
| + bool finish(GrGLuint* outProgramId);
|
| +
|
| + const GrGLSLExpr4& getInputColor() const {
|
| + return fInputColor;
|
| + }
|
| +
|
| + const GrGLSLExpr4& getInputCoverage() const {
|
| + return fInputCoverage;
|
| + }
|
| +
|
| + /**
|
| * Features that should only be enabled by GrGLShaderBuilder itself.
|
| */
|
| enum GLSLPrivateFeature {
|
| @@ -378,7 +367,7 @@ private:
|
|
|
| const GrGLProgramDesc& fDesc;
|
| GrGpuGL* fGpu;
|
| - GrGLUniformManager& fUniformManager;
|
| + SkAutoTUnref<GrGLUniformManager> fUniformManager;
|
| uint32_t fFSFeaturesAddedMask;
|
| SkString fFSFunctions;
|
| SkString fFSExtensions;
|
| @@ -410,7 +399,7 @@ private:
|
|
|
| class GrGLFullShaderBuilder : public GrGLShaderBuilder {
|
| public:
|
| - GrGLFullShaderBuilder(GrGpuGL*, GrGLUniformManager&, const GrGLProgramDesc&);
|
| + GrGLFullShaderBuilder(GrGpuGL*, GrGLUniformManager*, const GrGLProgramDesc&);
|
|
|
| /**
|
| * Called by GrGLEffects to add code to one of the shaders.
|
| @@ -454,12 +443,6 @@ public:
|
| bool addEffectAttribute(int attributeIndex, GrSLType type, const SkString& name);
|
| const SkString* getEffectAttributeName(int attributeIndex) const;
|
|
|
| - virtual GrGLProgramEffects* createAndEmitEffects(
|
| - const GrEffectStage* effectStages[],
|
| - const EffectKey effectKeys[],
|
| - int effectCnt,
|
| - GrGLSLExpr4* inOutFSColor) SK_OVERRIDE;
|
| -
|
| /**
|
| * The view matrix uniform is only valid in the VS. It is always mat33.
|
| */
|
| @@ -471,11 +454,16 @@ public:
|
| return fRTAdustmentVecUniform;
|
| }
|
|
|
| -protected:
|
| - virtual bool compileAndAttachShaders(GrGLuint programId, SkTDArray<GrGLuint>* shaderIds) const SK_OVERRIDE;
|
| +private:
|
| + virtual GrGLProgramEffects* createAndEmitEffects(const GrEffectStage* effectStages[],
|
| + const EffectKey effectKeys[],
|
| + int effectCnt,
|
| + GrGLSLExpr4* inOutFSColor) SK_OVERRIDE;
|
| + virtual bool compileAndAttachShaders(GrGLuint programId,
|
| + SkTDArray<GrGLuint>* shaderIds) const SK_OVERRIDE;
|
| +
|
| virtual void bindProgramLocations(GrGLuint programId) const SK_OVERRIDE;
|
|
|
| -private:
|
| VarArray fVSAttrs;
|
| VarArray fVSOutputs;
|
| VarArray fGSInputs;
|
| @@ -504,18 +492,18 @@ private:
|
|
|
| class GrGLFragmentOnlyShaderBuilder : public GrGLShaderBuilder {
|
| public:
|
| - GrGLFragmentOnlyShaderBuilder(GrGpuGL*, GrGLUniformManager&, const GrGLProgramDesc&);
|
| + GrGLFragmentOnlyShaderBuilder(GrGpuGL*, GrGLUniformManager*, const GrGLProgramDesc&);
|
|
|
| int getNumTexCoordSets() const { return fNumTexCoordSets; }
|
| int addTexCoordSets(int count);
|
|
|
| - virtual GrGLProgramEffects* createAndEmitEffects(
|
| - const GrEffectStage* effectStages[],
|
| - const EffectKey effectKeys[],
|
| - int effectCnt,
|
| - GrGLSLExpr4* inOutFSColor) SK_OVERRIDE;
|
| -
|
| private:
|
| +
|
| + virtual GrGLProgramEffects* createAndEmitEffects(const GrEffectStage* effectStages[],
|
| + const EffectKey effectKeys[],
|
| + int effectCnt,
|
| + GrGLSLExpr4* inOutFSColor) SK_OVERRIDE;
|
| +
|
| int fNumTexCoordSets;
|
|
|
| typedef GrGLShaderBuilder INHERITED;
|
|
|