| Index: src/gpu/gl/GrGLPathRendering.cpp
|
| diff --git a/src/gpu/gl/GrGLPathRendering.cpp b/src/gpu/gl/GrGLPathRendering.cpp
|
| index 135eb16866d9ad7f91d8ea4ee261fc56b5db6c7b..337e83e81172b3cc5b04a2aabb790741a95abd03 100644
|
| --- a/src/gpu/gl/GrGLPathRendering.cpp
|
| +++ b/src/gpu/gl/GrGLPathRendering.cpp
|
| @@ -54,8 +54,12 @@ GrGLPathRendering::GrGLPathRendering(GrGpuGL* gpu)
|
| NULL != glInterface->fFunctions.fStencilThenCoverFillPathInstanced &&
|
| NULL != glInterface->fFunctions.fStencilThenCoverStrokePathInstanced;
|
| fCaps.fragmentInputGenSupport =
|
| + kGLES_GrGLStandard == glInterface->fStandard &&
|
| NULL != glInterface->fFunctions.fProgramPathFragmentInputGen;
|
| - fHWPathTexGenSettings.reset(fGpu->glCaps().maxFixedFunctionTextureCoords());
|
| +
|
| + if (!fCaps.fragmentInputGenSupport) {
|
| + fHWPathTexGenSettings.reset(fGpu->glCaps().maxFixedFunctionTextureCoords());
|
| + }
|
| }
|
|
|
| GrGLPathRendering::~GrGLPathRendering() {
|
| @@ -68,14 +72,18 @@ void GrGLPathRendering::abandonGpuResources() {
|
| void GrGLPathRendering::resetContext() {
|
| fHWProjectionMatrixState.invalidate();
|
| // we don't use the model view matrix.
|
| - GL_CALL(MatrixLoadIdentity(GR_GL_MODELVIEW));
|
| -
|
| - for (int i = 0; i < fGpu->glCaps().maxFixedFunctionTextureCoords(); ++i) {
|
| - GL_CALL(PathTexGen(GR_GL_TEXTURE0 + i, GR_GL_NONE, 0, NULL));
|
| - fHWPathTexGenSettings[i].fMode = GR_GL_NONE;
|
| - fHWPathTexGenSettings[i].fNumComponents = 0;
|
| + GrGLenum matrixMode =
|
| + fGpu->glStandard() == kGLES_GrGLStandard ? GR_GL_PATH_MODELVIEW : GR_GL_MODELVIEW;
|
| + GL_CALL(MatrixLoadIdentity(matrixMode));
|
| +
|
| + if (!caps().fragmentInputGenSupport) {
|
| + for (int i = 0; i < fGpu->glCaps().maxFixedFunctionTextureCoords(); ++i) {
|
| + GL_CALL(PathTexGen(GR_GL_TEXTURE0 + i, GR_GL_NONE, 0, NULL));
|
| + fHWPathTexGenSettings[i].fMode = GR_GL_NONE;
|
| + fHWPathTexGenSettings[i].fNumComponents = 0;
|
| + }
|
| + fHWActivePathTexGenSets = 0;
|
| }
|
| - fHWActivePathTexGenSets = 0;
|
| fHWPathStencilSettings.invalidate();
|
| }
|
|
|
| @@ -105,7 +113,6 @@ void GrGLPathRendering::drawPath(const GrPath* path, SkPath::FillType fill) {
|
| GrGLuint id = static_cast<const GrGLPath*>(path)->pathID();
|
| SkASSERT(NULL != fGpu->drawState()->getRenderTarget());
|
| SkASSERT(NULL != fGpu->drawState()->getRenderTarget()->getStencilBuffer());
|
| - SkASSERT(!fGpu->fCurrentProgram->hasVertexShader());
|
|
|
| this->flushPathStencilSettings(fill);
|
| SkASSERT(!fHWPathStencilSettings.isTwoSided());
|
| @@ -162,7 +169,6 @@ void GrGLPathRendering::drawPaths(const GrPathRange* pathRange, const uint32_t i
|
| SkASSERT(fGpu->caps()->pathRenderingSupport());
|
| SkASSERT(NULL != fGpu->drawState()->getRenderTarget());
|
| SkASSERT(NULL != fGpu->drawState()->getRenderTarget()->getStencilBuffer());
|
| - SkASSERT(!fGpu->fCurrentProgram->hasVertexShader());
|
|
|
| GrGLuint baseID = static_cast<const GrGLPathRange*>(pathRange)->basePathID();
|
|
|
| @@ -347,7 +353,9 @@ void GrGLPathRendering::setProjectionMatrix(const SkMatrix& matrix,
|
|
|
| GrGLfloat glMatrix[4 * 4];
|
| fHWProjectionMatrixState.getRTAdjustedGLMatrix<4>(glMatrix);
|
| - GL_CALL(MatrixLoadf(GR_GL_PROJECTION, glMatrix));
|
| + GrGLenum matrixMode =
|
| + fGpu->glStandard() == kGLES_GrGLStandard ? GR_GL_PATH_PROJECTION : GR_GL_PROJECTION;
|
| + GL_CALL(MatrixLoadf(matrixMode, glMatrix));
|
| }
|
|
|
| GrGLuint GrGLPathRendering::genPaths(GrGLsizei range) {
|
|
|