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; |