| Index: src/gpu/GrAADistanceFieldPathRenderer.cpp
|
| diff --git a/src/gpu/GrAADistanceFieldPathRenderer.cpp b/src/gpu/GrAADistanceFieldPathRenderer.cpp
|
| index 913cda40faf0dd8bc4ef70487f162e2fbe95dacd..99093faed780fc2b94b1c9e66b1790d69913f7cd 100755
|
| --- a/src/gpu/GrAADistanceFieldPathRenderer.cpp
|
| +++ b/src/gpu/GrAADistanceFieldPathRenderer.cpp
|
| @@ -67,6 +67,7 @@ GrAADistanceFieldPathRenderer::~GrAADistanceFieldPathRenderer() {
|
| ////////////////////////////////////////////////////////////////////////////////
|
| bool GrAADistanceFieldPathRenderer::canDrawPath(const GrDrawTarget* target,
|
| const GrDrawState* drawState,
|
| + const SkMatrix& viewMatrix,
|
| const SkPath& path,
|
| const SkStrokeRec& stroke,
|
| bool antiAlias) const {
|
| @@ -79,14 +80,13 @@ bool GrAADistanceFieldPathRenderer::canDrawPath(const GrDrawTarget* target,
|
| }
|
|
|
| // currently don't support perspective
|
| - const SkMatrix& vm = drawState->getViewMatrix();
|
| - if (vm.hasPerspective()) {
|
| + if (viewMatrix.hasPerspective()) {
|
| return false;
|
| }
|
|
|
| // only support paths smaller than 64x64, scaled to less than 256x256
|
| // the goal is to accelerate rendering of lots of small paths that may be scaling
|
| - SkScalar maxScale = vm.getMaxScale();
|
| + SkScalar maxScale = viewMatrix.getMaxScale();
|
| const SkRect& bounds = path.getBounds();
|
| SkScalar maxDim = SkMaxScalar(bounds.width(), bounds.height());
|
| return maxDim < 64.f && maxDim*maxScale < 256.f;
|
| @@ -106,6 +106,7 @@ GrAADistanceFieldPathRenderer::onGetStencilSupport(const GrDrawTarget*,
|
| bool GrAADistanceFieldPathRenderer::onDrawPath(GrDrawTarget* target,
|
| GrDrawState* drawState,
|
| GrColor color,
|
| + const SkMatrix& viewMatrix,
|
| const SkPath& path,
|
| const SkStrokeRec& stroke,
|
| bool antiAlias) {
|
| @@ -117,8 +118,7 @@ bool GrAADistanceFieldPathRenderer::onDrawPath(GrDrawTarget* target,
|
| SkASSERT(fContext);
|
|
|
| // get mip level
|
| - const SkMatrix& vm = drawState->getViewMatrix();
|
| - SkScalar maxScale = vm.getMaxScale();
|
| + SkScalar maxScale = viewMatrix.getMaxScale();
|
| const SkRect& bounds = path.getBounds();
|
| SkScalar maxDim = SkMaxScalar(bounds.width(), bounds.height());
|
| SkScalar size = maxScale*maxDim;
|
| @@ -144,7 +144,7 @@ bool GrAADistanceFieldPathRenderer::onDrawPath(GrDrawTarget* target,
|
| }
|
|
|
| // use signed distance field to render
|
| - return this->internalDrawPath(target, drawState, color, path, pathData);
|
| + return this->internalDrawPath(target, drawState, color, viewMatrix, path, pathData);
|
| }
|
|
|
| // padding around path bounds to allow for antialiased pixels
|
| @@ -308,6 +308,7 @@ bool GrAADistanceFieldPathRenderer::freeUnusedPlot() {
|
| bool GrAADistanceFieldPathRenderer::internalDrawPath(GrDrawTarget* target,
|
| GrDrawState* drawState,
|
| GrColor color,
|
| + const SkMatrix& viewMatrix,
|
| const SkPath& path,
|
| const PathData* pathData) {
|
| GrTexture* texture = fAtlas->getTexture();
|
| @@ -319,12 +320,13 @@ bool GrAADistanceFieldPathRenderer::internalDrawPath(GrDrawTarget* target,
|
|
|
| // set up any flags
|
| uint32_t flags = 0;
|
| - const SkMatrix& vm = drawState->getViewMatrix();
|
| - flags |= vm.isSimilarity() ? kSimilarity_DistanceFieldEffectFlag : 0;
|
| + flags |= viewMatrix.isSimilarity() ? kSimilarity_DistanceFieldEffectFlag : 0;
|
|
|
| GrTextureParams params(SkShader::kRepeat_TileMode, GrTextureParams::kBilerp_FilterMode);
|
| - if (flags != fEffectFlags || fCachedGeometryProcessor->color() != color) {
|
| + if (flags != fEffectFlags || fCachedGeometryProcessor->color() != color ||
|
| + !fCachedGeometryProcessor->viewMatrix().cheapEqualTo(viewMatrix)) {
|
| fCachedGeometryProcessor.reset(GrDistanceFieldNoGammaTextureEffect::Create(color,
|
| + viewMatrix,
|
| texture,
|
| params,
|
| flags,
|
| @@ -370,7 +372,7 @@ bool GrAADistanceFieldPathRenderer::internalDrawPath(GrDrawTarget* target,
|
| SkFixedToFloat(texture->texturePriv().normalizeFixedY(ty + th)),
|
| vertSize);
|
|
|
| - vm.mapRect(&r);
|
| + viewMatrix.mapRect(&r);
|
| target->setIndexSourceToBuffer(fContext->getQuadIndexBuffer());
|
| target->drawIndexedInstances(drawState, fCachedGeometryProcessor.get(),
|
| kTriangles_GrPrimitiveType, 1, 4, 6, &r);
|
|
|