Index: src/gpu/gl/GrGLProgram.cpp |
diff --git a/src/gpu/gl/GrGLProgram.cpp b/src/gpu/gl/GrGLProgram.cpp |
index d4448b4b0b97aaaf77b4f6ee7f597420096a4409..435d0cdb02c988255244c53fc343ebf085fc44eb 100644 |
--- a/src/gpu/gl/GrGLProgram.cpp |
+++ b/src/gpu/gl/GrGLProgram.cpp |
@@ -38,29 +38,24 @@ GrGLProgram::GrGLProgram(GrGpuGL* gpu, |
const GrGLProgramDesc& desc, |
GrGLUniformManager* uman, |
const GrGLShaderBuilder::GenProgramOutput& builderOutput) |
- : fProgramID(builderOutput.fProgramID) |
- , fColor(GrColor_ILLEGAL) |
+ : fColor(GrColor_ILLEGAL) |
, fCoverage(GrColor_ILLEGAL) |
, fDstCopyTexUnit(-1) |
- , fColorEffects(builderOutput.fColorEffects) |
- , fCoverageEffects(builderOutput.fCoverageEffects) |
+ , fBuilderOutput(builderOutput) |
, fDesc(desc) |
, fGpu(gpu) |
- , fUniformManager(SkRef(uman)) |
- , fUniformHandles(builderOutput.fUniformHandles) |
- , fHasVertexShader(builderOutput.fHasVertexShader) |
- , fTexCoordSetCnt(builderOutput.fTexCoordSetCnt) { |
+ , fUniformManager(SkRef(uman)) { |
this->initSamplerUniforms(); |
} |
GrGLProgram::~GrGLProgram() { |
- if (fProgramID) { |
- GL_CALL(DeleteProgram(fProgramID)); |
+ if (fBuilderOutput.fProgramID) { |
+ GL_CALL(DeleteProgram(fBuilderOutput.fProgramID)); |
} |
} |
void GrGLProgram::abandon() { |
- fProgramID = 0; |
+ fBuilderOutput.fProgramID = 0; |
} |
void GrGLProgram::overrideBlend(GrBlendCoeff* srcCoeff, |
@@ -86,14 +81,14 @@ void GrGLProgram::overrideBlend(GrBlendCoeff* srcCoeff, |
} |
void GrGLProgram::initSamplerUniforms() { |
- GL_CALL(UseProgram(fProgramID)); |
+ GL_CALL(UseProgram(fBuilderOutput.fProgramID)); |
GrGLint texUnitIdx = 0; |
- if (fUniformHandles.fDstCopySamplerUni.isValid()) { |
- fUniformManager->setSampler(fUniformHandles.fDstCopySamplerUni, texUnitIdx); |
+ if (fBuilderOutput.fUniformHandles.fDstCopySamplerUni.isValid()) { |
+ fUniformManager->setSampler(fBuilderOutput.fUniformHandles.fDstCopySamplerUni, texUnitIdx); |
fDstCopyTexUnit = texUnitIdx++; |
} |
- fColorEffects->initSamplers(*fUniformManager, &texUnitIdx); |
- fCoverageEffects->initSamplers(*fUniformManager, &texUnitIdx); |
+ fBuilderOutput.fColorEffects->initSamplers(*fUniformManager, &texUnitIdx); |
+ fBuilderOutput.fCoverageEffects->initSamplers(*fUniformManager, &texUnitIdx); |
} |
/////////////////////////////////////////////////////////////////////////////// |
@@ -123,35 +118,35 @@ void GrGLProgram::setData(GrDrawState::BlendOptFlags blendOpts, |
this->setMatrixAndRenderTargetHeight(drawState); |
if (NULL != dstCopy) { |
- if (fUniformHandles.fDstCopyTopLeftUni.isValid()) { |
- fUniformManager->set2f(fUniformHandles.fDstCopyTopLeftUni, |
+ if (fBuilderOutput.fUniformHandles.fDstCopyTopLeftUni.isValid()) { |
+ fUniformManager->set2f(fBuilderOutput.fUniformHandles.fDstCopyTopLeftUni, |
static_cast<GrGLfloat>(dstCopy->offset().fX), |
static_cast<GrGLfloat>(dstCopy->offset().fY)); |
- fUniformManager->set2f(fUniformHandles.fDstCopyScaleUni, |
+ fUniformManager->set2f(fBuilderOutput.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); |
} else { |
- SkASSERT(!fUniformHandles.fDstCopyScaleUni.isValid()); |
- SkASSERT(!fUniformHandles.fDstCopySamplerUni.isValid()); |
+ SkASSERT(!fBuilderOutput.fUniformHandles.fDstCopyScaleUni.isValid()); |
+ SkASSERT(!fBuilderOutput.fUniformHandles.fDstCopySamplerUni.isValid()); |
} |
} else { |
- SkASSERT(!fUniformHandles.fDstCopyTopLeftUni.isValid()); |
- SkASSERT(!fUniformHandles.fDstCopyScaleUni.isValid()); |
- SkASSERT(!fUniformHandles.fDstCopySamplerUni.isValid()); |
+ SkASSERT(!fBuilderOutput.fUniformHandles.fDstCopyTopLeftUni.isValid()); |
+ SkASSERT(!fBuilderOutput.fUniformHandles.fDstCopyScaleUni.isValid()); |
+ SkASSERT(!fBuilderOutput.fUniformHandles.fDstCopySamplerUni.isValid()); |
} |
- fColorEffects->setData(fGpu, *fUniformManager, colorStages); |
- fCoverageEffects->setData(fGpu, *fUniformManager, coverageStages); |
+ fBuilderOutput.fColorEffects->setData(fGpu, *fUniformManager, colorStages); |
+ fBuilderOutput.fCoverageEffects->setData(fGpu, *fUniformManager, coverageStages); |
// PathTexGen state applies to the the fixed function vertex shader. For |
// custom shaders, it's ignored, so we don't need to change the texgen |
// settings in that case. |
- if (!fHasVertexShader) { |
- fGpu->flushPathTexGenSettings(fTexCoordSetCnt); |
+ if (!fBuilderOutput.fHasVertexShader) { |
+ fGpu->flushPathTexGenSettings(fBuilderOutput.fTexCoordSetCnt); |
} |
} |
@@ -174,11 +169,11 @@ void GrGLProgram::setColor(const GrDrawState& drawState, |
} |
break; |
case GrGLProgramDesc::kUniform_ColorInput: |
- if (fColor != color && fUniformHandles.fColorUni.isValid()) { |
+ if (fColor != color && fBuilderOutput.fUniformHandles.fColorUni.isValid()) { |
// OpenGL ES doesn't support unsigned byte varieties of glUniform |
GrGLfloat c[4]; |
GrColorToRGBAFloat(color, c); |
- fUniformManager->set4fv(fUniformHandles.fColorUni, 1, c); |
+ fUniformManager->set4fv(fBuilderOutput.fUniformHandles.fColorUni, 1, c); |
fColor = color; |
} |
sharedState->fConstAttribColorIndex = -1; |
@@ -217,7 +212,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(fBuilderOutput.fUniformHandles.fCoverageUni, 1, c); |
fCoverage = coverage; |
} |
sharedState->fConstAttribCoverageIndex = -1; |
@@ -240,19 +235,20 @@ void GrGLProgram::setMatrixAndRenderTargetHeight(const GrDrawState& drawState) { |
size.set(rt->width(), rt->height()); |
// Load the RT height uniform if it is needed to y-flip gl_FragCoord. |
- if (fUniformHandles.fRTHeightUni.isValid() && |
+ if (fBuilderOutput.fUniformHandles.fRTHeightUni.isValid() && |
fMatrixState.fRenderTargetSize.fHeight != size.fHeight) { |
- fUniformManager->set1f(fUniformHandles.fRTHeightUni, SkIntToScalar(size.fHeight)); |
+ fUniformManager->set1f(fBuilderOutput.fUniformHandles.fRTHeightUni, |
+ SkIntToScalar(size.fHeight)); |
} |
- if (!fHasVertexShader) { |
- SkASSERT(!fUniformHandles.fViewMatrixUni.isValid()); |
- SkASSERT(!fUniformHandles.fRTAdjustmentUni.isValid()); |
+ if (!fBuilderOutput.fHasVertexShader) { |
+ SkASSERT(!fBuilderOutput.fUniformHandles.fViewMatrixUni.isValid()); |
+ SkASSERT(!fBuilderOutput.fUniformHandles.fRTAdjustmentUni.isValid()); |
fGpu->setProjectionMatrix(drawState.getViewMatrix(), size, rt->origin()); |
} else if (fMatrixState.fRenderTargetOrigin != rt->origin() || |
fMatrixState.fRenderTargetSize != size || |
!fMatrixState.fViewMatrix.cheapEqualTo(drawState.getViewMatrix())) { |
- SkASSERT(fUniformHandles.fViewMatrixUni.isValid()); |
+ SkASSERT(fBuilderOutput.fUniformHandles.fViewMatrixUni.isValid()); |
fMatrixState.fViewMatrix = drawState.getViewMatrix(); |
fMatrixState.fRenderTargetSize = size; |
@@ -260,10 +256,10 @@ void GrGLProgram::setMatrixAndRenderTargetHeight(const GrDrawState& drawState) { |
GrGLfloat viewMatrix[3 * 3]; |
fMatrixState.getGLMatrix<3>(viewMatrix); |
- fUniformManager->setMatrix3f(fUniformHandles.fViewMatrixUni, viewMatrix); |
+ fUniformManager->setMatrix3f(fBuilderOutput.fUniformHandles.fViewMatrixUni, viewMatrix); |
GrGLfloat rtAdjustmentVec[4]; |
fMatrixState.getRTAdjustmentVec(rtAdjustmentVec); |
- fUniformManager->set4fv(fUniformHandles.fRTAdjustmentUni, 1, rtAdjustmentVec); |
+ fUniformManager->set4fv(fBuilderOutput.fUniformHandles.fRTAdjustmentUni, 1, rtAdjustmentVec); |
} |
} |