| Index: src/gpu/batches/GrAADistanceFieldPathRenderer.cpp
|
| diff --git a/src/gpu/batches/GrAADistanceFieldPathRenderer.cpp b/src/gpu/batches/GrAADistanceFieldPathRenderer.cpp
|
| index f10d3b8bbeabd7753b359429bfe1b198460160b3..35d1f619773166d536ecd16355af5a859f729def 100644
|
| --- a/src/gpu/batches/GrAADistanceFieldPathRenderer.cpp
|
| +++ b/src/gpu/batches/GrAADistanceFieldPathRenderer.cpp
|
| @@ -176,8 +176,9 @@ private:
|
| }
|
|
|
| struct FlushInfo {
|
| - SkAutoTUnref<const GrBuffer> fVertexBuffer;
|
| - SkAutoTUnref<const GrBuffer> fIndexBuffer;
|
| + SkAutoTUnref<const GrBuffer> fVertexBuffer;
|
| + SkAutoTUnref<const GrBuffer> fIndexBuffer;
|
| + SkAutoTUnref<const GrGeometryProcessor> fGeometryProcessor;
|
| int fVertexOffset;
|
| int fInstancesToFlush;
|
| };
|
| @@ -198,9 +199,11 @@ private:
|
|
|
| GrTextureParams params(SkShader::kRepeat_TileMode, GrTextureParams::kBilerp_FilterMode);
|
|
|
| + FlushInfo flushInfo;
|
| +
|
| // Setup GrGeometryProcessor
|
| GrBatchAtlas* atlas = fAtlas;
|
| - SkAutoTUnref<GrGeometryProcessor> dfProcessor(
|
| + flushInfo.fGeometryProcessor.reset(
|
| GrDistanceFieldPathGeoProc::Create(this->color(),
|
| this->viewMatrix(),
|
| atlas->getTexture(),
|
| @@ -208,12 +211,8 @@ private:
|
| flags,
|
| this->usesLocalCoords()));
|
|
|
| - target->initDraw(dfProcessor);
|
| -
|
| - FlushInfo flushInfo;
|
| -
|
| // allocate vertices
|
| - size_t vertexStride = dfProcessor->getVertexStride();
|
| + size_t vertexStride = flushInfo.fGeometryProcessor->getVertexStride();
|
| SkASSERT(vertexStride == 2 * sizeof(SkPoint) + sizeof(GrColor));
|
|
|
| const GrBuffer* vertexBuffer;
|
| @@ -259,8 +258,6 @@ private:
|
| SkScalar scale = desiredDimension/maxDim;
|
| pathData = new PathData;
|
| if (!this->addPathToAtlas(target,
|
| - dfProcessor,
|
| - this->pipeline(),
|
| &flushInfo,
|
| atlas,
|
| pathData,
|
| @@ -275,15 +272,13 @@ private:
|
| }
|
| }
|
|
|
| - atlas->setLastUseToken(pathData->fID, target->currentToken());
|
| + atlas->setLastUseToken(pathData->fID, target->nextDrawToken());
|
|
|
| // Now set vertices
|
| intptr_t offset = reinterpret_cast<intptr_t>(vertices);
|
| offset += i * kVerticesPerQuad * vertexStride;
|
| this->writePathVertices(target,
|
| atlas,
|
| - this->pipeline(),
|
| - dfProcessor,
|
| offset,
|
| args.fColor,
|
| vertexStride,
|
| @@ -316,8 +311,6 @@ private:
|
| }
|
|
|
| bool addPathToAtlas(GrVertexBatch::Target* target,
|
| - const GrGeometryProcessor* dfProcessor,
|
| - const GrPipeline* pipeline,
|
| FlushInfo* flushInfo,
|
| GrBatchAtlas* atlas,
|
| PathData* pathData,
|
| @@ -406,7 +399,6 @@ private:
|
| &atlasLocation);
|
| if (!success) {
|
| this->flush(target, flushInfo);
|
| - target->initDraw(dfProcessor);
|
|
|
| SkDEBUGCODE(success =) atlas->addToAtlas(&id, target, width, height,
|
| dfStorage.get(), &atlasLocation);
|
| @@ -443,8 +435,6 @@ private:
|
|
|
| void writePathVertices(GrDrawBatch::Target* target,
|
| GrBatchAtlas* atlas,
|
| - const GrPipeline* pipeline,
|
| - const GrGeometryProcessor* gp,
|
| intptr_t offset,
|
| GrColor color,
|
| size_t vertexStride,
|
| @@ -496,7 +486,7 @@ private:
|
| mesh.initInstanced(kTriangles_GrPrimitiveType, flushInfo->fVertexBuffer,
|
| flushInfo->fIndexBuffer, flushInfo->fVertexOffset, kVerticesPerQuad,
|
| kIndicesPerQuad, flushInfo->fInstancesToFlush, maxInstancesPerDraw);
|
| - target->draw(mesh);
|
| + target->draw(flushInfo->fGeometryProcessor, mesh);
|
| flushInfo->fVertexOffset += kVerticesPerQuad * flushInfo->fInstancesToFlush;
|
| flushInfo->fInstancesToFlush = 0;
|
| }
|
|
|