diff options
Diffstat (limited to 'src/gpu/batches/GrAADistanceFieldPathRenderer.cpp')
-rw-r--r-- | src/gpu/batches/GrAADistanceFieldPathRenderer.cpp | 28 |
1 files changed, 9 insertions, 19 deletions
diff --git a/src/gpu/batches/GrAADistanceFieldPathRenderer.cpp b/src/gpu/batches/GrAADistanceFieldPathRenderer.cpp index f10d3b8bbe..35d1f61977 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; } |