Index: src/gpu/gl/GrGLProgram.h |
diff --git a/src/gpu/gl/GrGLProgram.h b/src/gpu/gl/GrGLProgram.h |
index fc441e5d76f9fe3e123fc5dad53ae078e4ffc9db..21593e351f2528523fec8bb2919dfa317bd789b8 100644 |
--- a/src/gpu/gl/GrGLProgram.h |
+++ b/src/gpu/gl/GrGLProgram.h |
@@ -10,7 +10,6 @@ |
#define GrGLProgram_DEFINED |
#include "builders/GrGLProgramBuilder.h" |
-#include "builders/GrGLNvprProgramBuilder.h" |
#include "GrDrawState.h" |
#include "GrGLContext.h" |
#include "GrGLProgramDesc.h" |
@@ -22,7 +21,7 @@ |
#include "SkXfermode.h" |
class GrGLProcessor; |
-class GrGLInstalledProcessors; |
+class GrGLProgramEffects; |
class GrGLProgramBuilder; |
/** |
@@ -40,6 +39,13 @@ |
typedef GrGLProgramBuilder::BuiltinUniformHandles BuiltinUniformHandles; |
+ static GrGLProgram* Create(GrGpuGL* gpu, |
+ const GrOptDrawState& optState, |
+ const GrGLProgramDesc& desc, |
+ const GrGeometryStage* geometryProcessor, |
+ const GrFragmentStage* colorStages[], |
+ const GrFragmentStage* coverageStages[]); |
+ |
virtual ~GrGLProgram(); |
/** |
@@ -54,10 +60,7 @@ |
*/ |
GrGLuint programID() const { return fProgramID; } |
- /* |
- * The base class always has a vertex shader, only the NVPR variants may omit a vertex shader |
- */ |
- virtual bool hasVertexShader() const { return true; } |
+ bool hasVertexShader() const { return fHasVertexShader; } |
/** |
* Some GL state that is relevant to programs is not stored per-program. In particular color |
@@ -158,22 +161,15 @@ |
const GrDeviceCoordTexture* dstCopy, // can be NULL |
SharedGLState*); |
-protected: |
+private: |
typedef GrGLProgramDataManager::UniformHandle UniformHandle; |
- typedef GrGLProgramDataManager::UniformInfoArray UniformInfoArray; |
GrGLProgram(GrGpuGL*, |
const GrGLProgramDesc&, |
- const BuiltinUniformHandles&, |
- GrGLuint programID, |
- const UniformInfoArray&, |
- GrGLInstalledProcessors* geometryProcessor, |
- GrGLInstalledProcessors* colorProcessors, |
- GrGLInstalledProcessors* coverageProcessors); |
+ const GrGLProgramBuilder&); |
// Sets the texture units for samplers. |
void initSamplerUniforms(); |
- void initSamplers(GrGLInstalledProcessors* processors, int* texUnitIdx); |
// Helper for setData(). Makes GL calls to specify the initial color when there is not |
// per-vertex colors. |
@@ -183,134 +179,29 @@ |
// per-vertex coverages. |
void setCoverage(const GrOptDrawState&, GrColor coverage, SharedGLState*); |
- // A templated helper to loop over effects, set the transforms(via subclass) and bind textures |
- template <class ProcessorStage> |
- void setData(const ProcessorStage* effectStages[], |
- GrGLInstalledProcessors* installedProcessors) { |
- int numEffects = installedProcessors->fGLProcessors.count(); |
- SkASSERT(numEffects == installedProcessors->fTransforms.count()); |
- SkASSERT(numEffects == installedProcessors->fSamplers.count()); |
- for (int e = 0; e < numEffects; ++e) { |
- const GrProcessor& effect = *effectStages[e]->getProcessor(); |
- installedProcessors->fGLProcessors[e]->setData(fProgramDataManager, effect); |
- this->setTransformData(*effectStages[e], e, installedProcessors); |
- this->bindTextures(installedProcessors, effect, e); |
- } |
- } |
- virtual void setTransformData(const GrProcessorStage& effectStage, |
- int effectIdx, |
- GrGLInstalledProcessors* pe); |
- void bindTextures(const GrGLInstalledProcessors*, const GrProcessor&, int effectIdx); |
- |
- /* |
- * Legacy NVPR needs a hook here to flush path tex gen settings. |
- * TODO when legacy nvpr is removed, remove this call. |
- */ |
- virtual void didSetData(GrGpu::DrawType); |
- |
// Helper for setData() that sets the view matrix and loads the render target height uniform |
- void setMatrixAndRenderTargetHeight(GrGpu::DrawType, const GrOptDrawState&); |
- virtual void onSetMatrixAndRenderTargetHeight(GrGpu::DrawType, const GrOptDrawState&); |
+ void setMatrixAndRenderTargetHeight(GrGpu::DrawType drawType, const GrOptDrawState&); |
// these reflect the current values of uniforms (GL uniform values travel with program) |
- MatrixState fMatrixState; |
- GrColor fColor; |
- GrColor fCoverage; |
- int fDstCopyTexUnit; |
- BuiltinUniformHandles fBuiltinUniformHandles; |
- GrGLuint fProgramID; |
- |
- // the installed effects |
- SkAutoTUnref<GrGLInstalledProcessors> fGeometryProcessor; |
- SkAutoTUnref<GrGLInstalledProcessors> fColorEffects; |
- SkAutoTUnref<GrGLInstalledProcessors> fCoverageEffects; |
- |
- GrGLProgramDesc fDesc; |
- GrGpuGL* fGpu; |
- GrGLProgramDataManager fProgramDataManager; |
- |
- friend class GrGLProgramBuilder; |
+ MatrixState fMatrixState; |
+ GrColor fColor; |
+ GrColor fCoverage; |
+ int fDstCopyTexUnit; |
+ |
+ BuiltinUniformHandles fBuiltinUniformHandles; |
+ SkAutoTUnref<GrGLProgramEffects> fGeometryProcessor; |
+ SkAutoTUnref<GrGLProgramEffects> fColorEffects; |
+ SkAutoTUnref<GrGLProgramEffects> fCoverageEffects; |
+ GrGLuint fProgramID; |
+ bool fHasVertexShader; |
+ int fTexCoordSetCnt; |
+ |
+ GrGLProgramDesc fDesc; |
+ GrGpuGL* fGpu; |
+ |
+ GrGLProgramDataManager fProgramDataManager; |
typedef SkRefCnt INHERITED; |
}; |
-/* |
- * Below are slight specializations of the program object for the different types of programs |
- * The default GrGL programs consist of at the very least a vertex and fragment shader. |
- * Legacy Nvpr only has a fragment shader, 1.3+ Nvpr ignores the vertex shader, but both require |
- * specialized methods for setting transform data. Both types of NVPR also require setting the |
- * projection matrix through a special function call |
- */ |
-class GrGLNvprProgramBase : public GrGLProgram { |
-protected: |
- GrGLNvprProgramBase(GrGpuGL*, |
- const GrGLProgramDesc&, |
- const BuiltinUniformHandles&, |
- GrGLuint programID, |
- const UniformInfoArray&, |
- GrGLInstalledProcessors* colorProcessors, |
- GrGLInstalledProcessors* coverageProcessors); |
- virtual void onSetMatrixAndRenderTargetHeight(GrGpu::DrawType, const GrOptDrawState&); |
- |
- typedef GrGLProgram INHERITED; |
-}; |
- |
-class GrGLNvprProgram : public GrGLNvprProgramBase { |
-public: |
- virtual bool hasVertexShader() const SK_OVERRIDE { return true; } |
- |
-private: |
- typedef GrGLNvprProgramBuilder::SeparableVaryingInfo SeparableVaryingInfo; |
- typedef GrGLNvprProgramBuilder::SeparableVaryingInfoArray SeparableVaryingInfoArray; |
- GrGLNvprProgram(GrGpuGL*, |
- const GrGLProgramDesc&, |
- const BuiltinUniformHandles&, |
- GrGLuint programID, |
- const UniformInfoArray&, |
- GrGLInstalledProcessors* colorProcessors, |
- GrGLInstalledProcessors* coverageProcessors, |
- const SeparableVaryingInfoArray& separableVaryings); |
- virtual void didSetData(GrGpu::DrawType) SK_OVERRIDE; |
- virtual void setTransformData(const GrProcessorStage&, |
- int effectIdx, |
- GrGLInstalledProcessors*) SK_OVERRIDE; |
- |
- struct Varying { |
- GrGLint fLocation; |
- SkDEBUGCODE( |
- GrSLType fType; |
- ); |
- }; |
- SkTArray<Varying, true> fVaryings; |
- |
- friend class GrGLNvprProgramBuilder; |
- |
- typedef GrGLNvprProgramBase INHERITED; |
-}; |
- |
-class GrGLLegacyNvprProgram : public GrGLNvprProgramBase { |
-public: |
- virtual bool hasVertexShader() const SK_OVERRIDE { return false; } |
- |
-private: |
- GrGLLegacyNvprProgram(GrGpuGL* gpu, |
- const GrGLProgramDesc& desc, |
- const BuiltinUniformHandles&, |
- GrGLuint programID, |
- const UniformInfoArray&, |
- GrGLInstalledProcessors* colorProcessors, |
- GrGLInstalledProcessors* coverageProcessors, |
- int texCoordSetCnt); |
- virtual void didSetData(GrGpu::DrawType) SK_OVERRIDE; |
- virtual void setTransformData(const GrProcessorStage&, |
- int effectIdx, |
- GrGLInstalledProcessors*) SK_OVERRIDE; |
- |
- int fTexCoordSetCnt; |
- |
- friend class GrGLLegacyNvprProgramBuilder; |
- |
- typedef GrGLNvprProgramBase INHERITED; |
-}; |
- |
#endif |