aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/gl/GrGLProgram.cpp
diff options
context:
space:
mode:
authorGravatar commit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>2014-05-29 21:29:51 +0000
committerGravatar commit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>2014-05-29 21:29:51 +0000
commit6eac42e3ab68b085117d7f91621276a722b5a3a7 (patch)
tree0f477cafdc2581a70fab4a8baf4b122ae72ef782 /src/gpu/gl/GrGLProgram.cpp
parentd0f824cfbd8951bb948b19d7ff5dce028ce557a5 (diff)
Incremental refactoring of GrGLProgram and GrGLShaderBuilder
R=robertphillips@google.com Author: bsalomon@google.com Review URL: https://codereview.chromium.org/302663006 git-svn-id: http://skia.googlecode.com/svn/trunk@14980 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src/gpu/gl/GrGLProgram.cpp')
-rw-r--r--src/gpu/gl/GrGLProgram.cpp85
1 files changed, 38 insertions, 47 deletions
diff --git a/src/gpu/gl/GrGLProgram.cpp b/src/gpu/gl/GrGLProgram.cpp
index c63914893d..1d85b0a327 100644
--- a/src/gpu/gl/GrGLProgram.cpp
+++ b/src/gpu/gl/GrGLProgram.cpp
@@ -24,42 +24,33 @@ GrGLProgram* GrGLProgram::Create(GrGpuGL* gpu,
const GrGLProgramDesc& desc,
const GrEffectStage* colorStages[],
const GrEffectStage* coverageStages[]) {
- GrGLProgram* program = SkNEW_ARGS(GrGLProgram, (gpu, desc, colorStages, coverageStages));
- if (!program->succeeded()) {
- delete program;
- program = NULL;
+ GrGLShaderBuilder::GenProgramOutput output;
+ SkAutoTUnref<GrGLUniformManager> uman(SkNEW_ARGS(GrGLUniformManager, (gpu)));
+ if (GrGLShaderBuilder::GenProgram(gpu, uman, desc, colorStages, coverageStages,
+ &output)) {
+ SkASSERT(0 != output.fProgramID);
+ return SkNEW_ARGS(GrGLProgram, (gpu, desc, uman, output));
}
- return program;
+ return NULL;
}
GrGLProgram::GrGLProgram(GrGpuGL* gpu,
const GrGLProgramDesc& desc,
- const GrEffectStage* colorStages[],
- const GrEffectStage* coverageStages[])
-: fGpu(gpu)
-, fUniformManager(gpu)
-, fHasVertexShader(false)
-, fNumTexCoordSets(0) {
- fDesc = desc;
- fProgramID = 0;
-
- fDstCopyTexUnit = -1;
-
- fColor = GrColor_ILLEGAL;
-
- GrGLShaderBuilder::GenProgramOutput output;
-
- if (GrGLShaderBuilder::GenProgram(gpu, fUniformManager, desc, colorStages, coverageStages,
- &output)) {
- fProgramID = output.fProgramID;
- fUniformHandles = output.fUniformHandles;
- fColorEffects.reset(output.fColorEffects);
- fCoverageEffects.reset(output.fCoverageEffects);
- fHasVertexShader = output.fHasVS;
- fNumTexCoordSets = output.fNumTexCoordSets;
- fGpu = gpu;
- this->initSamplerUniforms();
- }
+ GrGLUniformManager* uman,
+ const GrGLShaderBuilder::GenProgramOutput& builderOutput)
+ : fProgramID(builderOutput.fProgramID)
+ , fColor(GrColor_ILLEGAL)
+ , fCoverage(GrColor_ILLEGAL)
+ , fDstCopyTexUnit(-1)
+ , fColorEffects(builderOutput.fColorEffects)
+ , fCoverageEffects(builderOutput.fCoverageEffects)
+ , fDesc(desc)
+ , fGpu(gpu)
+ , fUniformManager(SkRef(uman))
+ , fUniformHandles(builderOutput.fUniformHandles)
+ , fHasVertexShader(builderOutput.fHasVS)
+ , fNumTexCoordSets(builderOutput.fNumTexCoordSets) {
+ this->initSamplerUniforms();
}
GrGLProgram::~GrGLProgram() {
@@ -98,11 +89,11 @@ void GrGLProgram::initSamplerUniforms() {
GL_CALL(UseProgram(fProgramID));
GrGLint texUnitIdx = 0;
if (fUniformHandles.fDstCopySamplerUni.isValid()) {
- fUniformManager.setSampler(fUniformHandles.fDstCopySamplerUni, texUnitIdx);
+ fUniformManager->setSampler(fUniformHandles.fDstCopySamplerUni, texUnitIdx);
fDstCopyTexUnit = texUnitIdx++;
}
- fColorEffects->initSamplers(fUniformManager, &texUnitIdx);
- fCoverageEffects->initSamplers(fUniformManager, &texUnitIdx);
+ fColorEffects->initSamplers(*fUniformManager, &texUnitIdx);
+ fCoverageEffects->initSamplers(*fUniformManager, &texUnitIdx);
}
///////////////////////////////////////////////////////////////////////////////
@@ -133,12 +124,12 @@ void GrGLProgram::setData(GrDrawState::BlendOptFlags blendOpts,
if (NULL != dstCopy) {
if (fUniformHandles.fDstCopyTopLeftUni.isValid()) {
- fUniformManager.set2f(fUniformHandles.fDstCopyTopLeftUni,
- static_cast<GrGLfloat>(dstCopy->offset().fX),
- static_cast<GrGLfloat>(dstCopy->offset().fY));
- fUniformManager.set2f(fUniformHandles.fDstCopyScaleUni,
- 1.f / dstCopy->texture()->width(),
- 1.f / dstCopy->texture()->height());
+ fUniformManager->set2f(fUniformHandles.fDstCopyTopLeftUni,
+ static_cast<GrGLfloat>(dstCopy->offset().fX),
+ static_cast<GrGLfloat>(dstCopy->offset().fY));
+ fUniformManager->set2f(fUniformHandles.fDstCopyScaleUni,
+ 1.f / dstCopy->texture()->width(),
+ 1.f / dstCopy->texture()->height());
GrGLTexture* texture = static_cast<GrGLTexture*>(dstCopy->texture());
static GrTextureParams kParams; // the default is clamp, nearest filtering.
fGpu->bindTexture(fDstCopyTexUnit, kParams, texture);
@@ -152,8 +143,8 @@ void GrGLProgram::setData(GrDrawState::BlendOptFlags blendOpts,
SkASSERT(!fUniformHandles.fDstCopySamplerUni.isValid());
}
- fColorEffects->setData(fGpu, fUniformManager, colorStages);
- fCoverageEffects->setData(fGpu, fUniformManager, coverageStages);
+ fColorEffects->setData(fGpu, *fUniformManager, colorStages);
+ fCoverageEffects->setData(fGpu, *fUniformManager, coverageStages);
// PathTexGen state applies to the the fixed function vertex shader. For
@@ -187,7 +178,7 @@ void GrGLProgram::setColor(const GrDrawState& drawState,
// OpenGL ES doesn't support unsigned byte varieties of glUniform
GrGLfloat c[4];
GrColorToRGBAFloat(color, c);
- fUniformManager.set4fv(fUniformHandles.fColorUni, 1, c);
+ fUniformManager->set4fv(fUniformHandles.fColorUni, 1, c);
fColor = color;
}
sharedState->fConstAttribColorIndex = -1;
@@ -226,7 +217,7 @@ void GrGLProgram::setCoverage(const GrDrawState& drawState,
// OpenGL ES doesn't support unsigned byte varieties of glUniform
GrGLfloat c[4];
GrColorToRGBAFloat(coverage, c);
- fUniformManager.set4fv(fUniformHandles.fCoverageUni, 1, c);
+ fUniformManager->set4fv(fUniformHandles.fCoverageUni, 1, c);
fCoverage = coverage;
}
sharedState->fConstAttribCoverageIndex = -1;
@@ -251,7 +242,7 @@ void GrGLProgram::setMatrixAndRenderTargetHeight(const GrDrawState& drawState) {
// Load the RT height uniform if it is needed to y-flip gl_FragCoord.
if (fUniformHandles.fRTHeightUni.isValid() &&
fMatrixState.fRenderTargetSize.fHeight != size.fHeight) {
- fUniformManager.set1f(fUniformHandles.fRTHeightUni, SkIntToScalar(size.fHeight));
+ fUniformManager->set1f(fUniformHandles.fRTHeightUni, SkIntToScalar(size.fHeight));
}
if (!fHasVertexShader) {
@@ -269,10 +260,10 @@ void GrGLProgram::setMatrixAndRenderTargetHeight(const GrDrawState& drawState) {
GrGLfloat viewMatrix[3 * 3];
fMatrixState.getGLMatrix<3>(viewMatrix);
- fUniformManager.setMatrix3f(fUniformHandles.fViewMatrixUni, viewMatrix);
+ fUniformManager->setMatrix3f(fUniformHandles.fViewMatrixUni, viewMatrix);
GrGLfloat rtAdjustmentVec[4];
fMatrixState.getRTAdjustmentVec(rtAdjustmentVec);
- fUniformManager.set4fv(fUniformHandles.fRTAdjustmentUni, 1, rtAdjustmentVec);
+ fUniformManager->set4fv(fUniformHandles.fRTAdjustmentUni, 1, rtAdjustmentVec);
}
}