Chromium Code Reviews| Index: src/gpu/gl/builders/GrGLProgramBuilder.h |
| diff --git a/src/gpu/gl/builders/GrGLProgramBuilder.h b/src/gpu/gl/builders/GrGLProgramBuilder.h |
| index ed4224d9b5f4e4d72d5dc19fc59aa38822275649..741a3c6d2257fb060393d612f27929fad8b11f17 100644 |
| --- a/src/gpu/gl/builders/GrGLProgramBuilder.h |
| +++ b/src/gpu/gl/builders/GrGLProgramBuilder.h |
| @@ -118,9 +118,6 @@ public: |
| static GrGLProgram* CreateProgram(const GrOptDrawState&, |
| const GrGLProgramDesc&, |
| GrGpu::DrawType, |
| - const GrGeometryStage* inGeometryProcessor, |
| - const GrFragmentStage* inColorStages[], |
| - const GrFragmentStage* inCoverageStages[], |
| GrGpuGL* gpu); |
| virtual UniformHandle addUniform(uint32_t visibility, |
| @@ -150,11 +147,12 @@ public: |
| virtual GrGLFragmentShaderBuilder* getFragmentShaderBuilder() SK_OVERRIDE { return &fFS; } |
| virtual GrGLVertexBuilder* getVertexShaderBuilder() SK_OVERRIDE { return &fVS; } |
| - virtual void addVarying(GrSLType type, |
| - const char* name, |
| - const char** vsOutName = NULL, |
| - const char** fsInName = NULL, |
| - GrGLShaderVar::Precision fsPrecision=GrGLShaderVar::kDefault_Precision); |
| + virtual void addVarying( |
| + GrSLType type, |
| + const char* name, |
| + const char** vsOutName = NULL, |
| + const char** fsInName = NULL, |
| + GrGLShaderVar::Precision fsPrecision=GrGLShaderVar::kDefault_Precision) SK_OVERRIDE; |
| // Handles for program uniforms (other than per-effect uniforms) |
| struct BuiltinUniformHandles { |
| @@ -174,6 +172,10 @@ public: |
| }; |
| protected: |
| + typedef GrGLProgramDesc::EffectKeyProvider EffectKeyProvider; |
| + typedef GrGLProgramDataManager::UniformInfo UniformInfo; |
| + typedef GrGLProgramDataManager::UniformInfoArray UniformInfoArray; |
| + |
| static GrGLProgramBuilder* CreateProgramBuilder(const GrGLProgramDesc&, |
| const GrOptDrawState&, |
| GrGpu::DrawType, |
| @@ -191,32 +193,41 @@ protected: |
| // generating stage code. |
| void nameVariable(SkString* out, char prefix, const char* name); |
| void setupUniformColorAndCoverageIfNeeded(GrGLSLExpr4* inputColor, GrGLSLExpr4* inputCoverage); |
| - void createAndEmitProcessors(const GrGeometryStage* geometryProcessor, |
| - const GrFragmentStage* colorStages[], |
| - const GrFragmentStage* coverageStages[], |
| - GrGLSLExpr4* inputColor, |
| - GrGLSLExpr4* inputCoverage); |
| - template <class ProcessorStage> |
| - void createAndEmitProcessors(const ProcessorStage*[], |
| - int effectCnt, |
| - const GrGLProgramDesc::EffectKeyProvider&, |
| - GrGLSLExpr4* fsInOutColor, |
| - GrGLInstalledProcessors*); |
| + template <class ClassMap> |
| + void createAndEmitProcessors(const EffectKeyProvider::EffectType, |
|
bsalomon
2014/10/09 18:35:45
Another place where it seems like we're trying to
|
| + bool useLocalCoords, |
| + SkAutoTUnref<GrGLInstalledProcessors>*, |
| + GrGLSLExpr4* fsInOutColor); |
| void verify(const GrGeometryProcessor&); |
| void verify(const GrFragmentProcessor&); |
| void emitSamplers(const GrProcessor&, |
| GrGLProcessor::TextureSamplerArray* outSamplers, |
| GrGLInstalledProcessors*); |
| + // these emit functions help to keep the createAndEmitProcessors template general |
| + void emit(const GrFragmentStage&, |
| + const GrProcessorKey&, |
| + const char* outColor, |
| + const char* inColor, |
| + const GrGLProcessor::TextureSamplerArray&, |
| + GrGLInstalledProcessors*, |
| + GrGLFragmentProcessor*); |
| + void emit(const GrGeometryProcessor&, |
| + const GrProcessorKey&, |
| + const char* outColor, |
| + const char* inColor, |
| + const GrGLProcessor::TextureSamplerArray&, |
| + GrGLInstalledProcessors*, |
| + GrGLGeometryProcessor*); |
| + |
| // each specific program builder has a distinct transform and must override this function |
| - virtual void emitTransforms(const GrProcessorStage&, |
| + virtual void emitTransforms(const GrFragmentStage&, |
| GrGLProcessor::TransformedCoordsArray* outCoords, |
| GrGLInstalledProcessors*); |
| GrGLProgram* finalize(); |
| void bindUniformLocations(GrGLuint programID); |
| bool checkLinkStatus(GrGLuint programID); |
| void resolveUniformLocations(GrGLuint programID); |
| - |
| void cleanupProgram(GrGLuint programID, const SkTDArray<GrGLuint>& shaderIDs); |
| void cleanupShaders(const SkTDArray<GrGLuint>& shaderIDs); |
| @@ -256,10 +267,6 @@ protected: |
| void enterStage() { fOutOfStage = false; } |
| int stageIndex() const { return fStageIndex; } |
| - typedef GrGLProgramDesc::EffectKeyProvider EffectKeyProvider; |
| - typedef GrGLProgramDataManager::UniformInfo UniformInfo; |
| - typedef GrGLProgramDataManager::UniformInfoArray UniformInfoArray; |
| - |
| // number of each input/output type in a single allocation block, used by many builders |
| static const int kVarsPerBlock; |