| Index: src/gpu/gl/GrGLProgram.h
|
| diff --git a/src/gpu/gl/GrGLProgram.h b/src/gpu/gl/GrGLProgram.h
|
| index ce43b710bfeb3dd13e9458a905a81e7b9b846272..3534552f9803756264531b2f56fc3faeeddbf0d1 100644
|
| --- a/src/gpu/gl/GrGLProgram.h
|
| +++ b/src/gpu/gl/GrGLProgram.h
|
| @@ -38,7 +38,8 @@ public:
|
|
|
| static GrGLProgram* Create(const GrGLContext& gl,
|
| const GrGLProgramDesc& desc,
|
| - const GrEffectStage* stages[]);
|
| + const GrEffectStage* colorStages[],
|
| + const GrEffectStage* coverageStages[]);
|
|
|
| virtual ~GrGLProgram();
|
|
|
| @@ -103,59 +104,19 @@ public:
|
| /**
|
| * This function uploads uniforms and calls each GrGLEffect's setData. It is called before a
|
| * draw occurs using the program after the program has already been bound. It also uses the
|
| - * GrGpuGL object to bind the textures required by the GrGLEffects.
|
| + * GrGpuGL object to bind the textures required by the GrGLEffects. The color and coverage
|
| + * stages come from GrGLProgramDesc::Build().
|
| */
|
| void setData(GrGpuGL*,
|
| GrDrawState::BlendOptFlags,
|
| - const GrEffectStage* stages[], // output of GrGLProgramDesc:Build()
|
| + const GrEffectStage* colorStages[],
|
| + const GrEffectStage* coverageStages[],
|
| const GrDeviceCoordTexture* dstCopy, // can be NULL
|
| SharedGLState*);
|
|
|
| private:
|
| - GrGLProgram(const GrGLContext& gl,
|
| - const GrGLProgramDesc& desc,
|
| - const GrEffectStage* stages[]);
|
| -
|
| - bool succeeded() const { return 0 != fProgramID; }
|
| -
|
| - /**
|
| - * This is the heavy initialization routine for building a GLProgram. stages is all the enabled
|
| - * color stages followed by all the enabled coverage stages as output by
|
| - * GrGLProgramDesc::Build()
|
| - */
|
| - bool genProgram(const GrEffectStage* stages[]);
|
| -
|
| - GrSLConstantVec genInputColor(GrGLShaderBuilder* builder, SkString* inColor);
|
| -
|
| - GrSLConstantVec genInputCoverage(GrGLShaderBuilder* builder, SkString* inCoverage);
|
| -
|
| - void genGeometryShader(GrGLShaderBuilder* segments) const;
|
| -
|
| typedef GrGLUniformManager::UniformHandle UniformHandle;
|
|
|
| - // Creates a GL program ID, binds shader attributes to GL vertex attrs, and links the program
|
| - bool bindOutputsAttribsAndLinkProgram(const GrGLShaderBuilder& builder,
|
| - bool bindColorOut,
|
| - bool bindDualSrcOut);
|
| -
|
| - // Sets the texture units for samplers
|
| - void initSamplerUniforms();
|
| -
|
| - bool compileShaders(const GrGLShaderBuilder& builder);
|
| -
|
| - const char* adjustInColor(const SkString& inColor) const;
|
| -
|
| - // Helper for setData(). Makes GL calls to specify the initial color when there is not
|
| - // per-vertex colors.
|
| - void setColor(const GrDrawState&, GrColor color, SharedGLState*);
|
| -
|
| - // Helper for setData(). Makes GL calls to specify the initial coverage when there is not
|
| - // per-vertex coverages.
|
| - void setCoverage(const GrDrawState&, GrColor coverage, SharedGLState*);
|
| -
|
| - // Helper for setData() that sets the view matrix and loads the render target height uniform
|
| - void setMatrixAndRenderTargetHeight(const GrDrawState&);
|
| -
|
| // handles for uniforms (aside from per-effect samplers)
|
| struct UniformHandles {
|
| UniformHandle fViewMatrixUni;
|
| @@ -195,6 +156,52 @@ private:
|
| TextureUnitSArray fTextureUnits; // texture unit used for each entry of fSamplerUnis
|
| };
|
|
|
| + GrGLProgram(const GrGLContext& gl,
|
| + const GrGLProgramDesc& desc,
|
| + const GrEffectStage* colorStages[],
|
| + const GrEffectStage* coverageStages[]);
|
| +
|
| + bool succeeded() const { return 0 != fProgramID; }
|
| +
|
| + /**
|
| + * This is the heavy initialization routine for building a GLProgram. colorStages and
|
| + * coverageStages correspond to the output of GrGLProgramDesc::Build().
|
| + */
|
| + bool genProgram(const GrEffectStage* colorStages[], const GrEffectStage* coverageStages[]);
|
| +
|
| + GrSLConstantVec genInputColor(GrGLShaderBuilder* builder, SkString* inColor);
|
| +
|
| + GrSLConstantVec genInputCoverage(GrGLShaderBuilder* builder, SkString* inCoverage);
|
| +
|
| + void genGeometryShader(GrGLShaderBuilder* segments) const;
|
| +
|
| + // Creates a GL program ID, binds shader attributes to GL vertex attrs, and links the program
|
| + bool bindOutputsAttribsAndLinkProgram(const GrGLShaderBuilder& builder,
|
| + bool bindColorOut,
|
| + bool bindDualSrcOut);
|
| +
|
| + // Sets the texture units for samplers
|
| + void initSamplerUniforms();
|
| + void initEffectSamplerUniforms(EffectAndSamplers* effect, int* texUnitIdx);
|
| +
|
| + bool compileShaders(const GrGLShaderBuilder& builder);
|
| +
|
| + const char* adjustInColor(const SkString& inColor) const;
|
| +
|
| + // Helper for setData().
|
| + void setEffectData(GrGpuGL* gpu, const GrEffectStage& stage, const EffectAndSamplers& effect);
|
| +
|
| + // Helper for setData(). Makes GL calls to specify the initial color when there is not
|
| + // per-vertex colors.
|
| + void setColor(const GrDrawState&, GrColor color, SharedGLState*);
|
| +
|
| + // Helper for setData(). Makes GL calls to specify the initial coverage when there is not
|
| + // per-vertex coverages.
|
| + void setCoverage(const GrDrawState&, GrColor coverage, SharedGLState*);
|
| +
|
| + // Helper for setData() that sets the view matrix and loads the render target height uniform
|
| + void setMatrixAndRenderTargetHeight(const GrDrawState&);
|
| +
|
| // GL IDs
|
| GrGLuint fVShaderID;
|
| GrGLuint fGShaderID;
|
| @@ -208,7 +215,8 @@ private:
|
| GrColor fColorFilterColor;
|
| int fDstCopyTexUnit;
|
|
|
| - SkTArray<EffectAndSamplers> fEffectStates;
|
| + SkTArray<EffectAndSamplers> fColorEffects;
|
| + SkTArray<EffectAndSamplers> fCoverageEffects;
|
|
|
| GrGLProgramDesc fDesc;
|
| const GrGLContext& fContext;
|
|
|