Index: src/gpu/gl/GrGLProgram.cpp |
diff --git a/src/gpu/gl/GrGLProgram.cpp b/src/gpu/gl/GrGLProgram.cpp |
index 0ad7a1875646475a64f2e55254966a5af2b34a69..692e7a728d53216a6f9ac2777edd88fa9f868965 100644 |
--- a/src/gpu/gl/GrGLProgram.cpp |
+++ b/src/gpu/gl/GrGLProgram.cpp |
@@ -13,6 +13,7 @@ |
#include "GrDrawEffect.h" |
#include "GrGLEffect.h" |
#include "GrGpuGL.h" |
+#include "GrGLPathRendering.h" |
#include "GrGLShaderVar.h" |
#include "GrGLSL.h" |
#include "SkXfermode.h" |
@@ -25,10 +26,12 @@ GrGLProgram* GrGLProgram::Create(GrGpuGL* gpu, |
const GrEffectStage* colorStages[], |
const GrEffectStage* coverageStages[]) { |
SkAutoTDelete<GrGLShaderBuilder> builder; |
- if (desc.getHeader().fHasVertexCode ||!gpu->shouldUseFixedFunctionTexturing()) { |
- builder.reset(SkNEW_ARGS(GrGLFullShaderBuilder, (gpu, desc))); |
- } else { |
+ if (!desc.getHeader().fHasVertexCode && |
bsalomon
2014/08/07 21:02:52
I think we should probably rename this field from
|
+ gpu->glCaps().pathRenderingSupport() && |
+ !gpu->pathRendering()->caps().fragmentInputGenSupport) { |
builder.reset(SkNEW_ARGS(GrGLFragmentOnlyShaderBuilder, (gpu, desc))); |
+ } else { |
+ builder.reset(SkNEW_ARGS(GrGLFullShaderBuilder, (gpu, desc))); |
} |
if (builder->genProgram(colorStages, coverageStages)) { |
@@ -101,7 +104,8 @@ void GrGLProgram::initSamplerUniforms() { |
/////////////////////////////////////////////////////////////////////////////// |
-void GrGLProgram::setData(GrDrawState::BlendOptFlags blendOpts, |
+void GrGLProgram::setData(GrGpu::DrawType drawType, |
+ GrDrawState::BlendOptFlags blendOpts, |
const GrEffectStage* colorStages[], |
const GrEffectStage* coverageStages[], |
const GrDeviceCoordTexture* dstCopy, |
@@ -123,7 +127,7 @@ void GrGLProgram::setData(GrDrawState::BlendOptFlags blendOpts, |
this->setColor(drawState, color, sharedState); |
this->setCoverage(drawState, coverage, sharedState); |
- this->setMatrixAndRenderTargetHeight(drawState); |
+ this->setMatrixAndRenderTargetHeight(drawType, drawState); |
if (NULL != dstCopy) { |
if (fBuiltinUniformHandles.fDstCopyTopLeftUni.isValid()) { |
@@ -146,9 +150,8 @@ void GrGLProgram::setData(GrDrawState::BlendOptFlags blendOpts, |
SkASSERT(!fBuiltinUniformHandles.fDstCopySamplerUni.isValid()); |
} |
- fColorEffects->setData(fGpu, fProgramDataManager, colorStages); |
- fCoverageEffects->setData(fGpu, fProgramDataManager, coverageStages); |
- |
+ fColorEffects->setData(fGpu, drawType,fProgramDataManager, colorStages); |
+ fCoverageEffects->setData(fGpu, drawType,fProgramDataManager, 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 |
@@ -232,7 +235,8 @@ void GrGLProgram::setCoverage(const GrDrawState& drawState, |
} |
} |
-void GrGLProgram::setMatrixAndRenderTargetHeight(const GrDrawState& drawState) { |
+void GrGLProgram::setMatrixAndRenderTargetHeight(GrGpu::DrawType drawType, |
+ const GrDrawState& drawState) { |
const GrRenderTarget* rt = drawState.getRenderTarget(); |
SkISize size; |
size.set(rt->width(), rt->height()); |
@@ -244,9 +248,7 @@ void GrGLProgram::setMatrixAndRenderTargetHeight(const GrDrawState& drawState) { |
SkIntToScalar(size.fHeight)); |
} |
- if (!fHasVertexShader) { |
- SkASSERT(!fBuiltinUniformHandles.fViewMatrixUni.isValid()); |
- SkASSERT(!fBuiltinUniformHandles.fRTAdjustmentUni.isValid()); |
+ if (GrGpu::IsPathRenderingDrawType(drawType)) { |
fGpu->setProjectionMatrix(drawState.getViewMatrix(), size, rt->origin()); |
} else if (fMatrixState.fRenderTargetOrigin != rt->origin() || |
fMatrixState.fRenderTargetSize != size || |