| Index: src/gpu/batches/GrTessellatingPathRenderer.cpp
|
| diff --git a/src/gpu/batches/GrTessellatingPathRenderer.cpp b/src/gpu/batches/GrTessellatingPathRenderer.cpp
|
| index 85c2ca0738b5e6bc1e8fb18f12d1caf98ddeb496..06f31cd8db7147fcb542524cfe16768baa9c36c1 100644
|
| --- a/src/gpu/batches/GrTessellatingPathRenderer.cpp
|
| +++ b/src/gpu/batches/GrTessellatingPathRenderer.cpp
|
| @@ -61,20 +61,15 @@ bool cache_match(GrVertexBuffer* vertexBuffer, SkScalar tol, int* actualCount) {
|
|
|
| class StaticVertexAllocator : public GrTessellator::VertexAllocator {
|
| public:
|
| - StaticVertexAllocator(SkAutoTUnref<GrVertexBuffer>& vertexBuffer,
|
| - GrResourceProvider* resourceProvider,
|
| - bool canMapVB)
|
| - : fVertexBuffer(vertexBuffer)
|
| - , fResourceProvider(resourceProvider)
|
| + StaticVertexAllocator(GrResourceProvider* resourceProvider, bool canMapVB)
|
| + : fResourceProvider(resourceProvider)
|
| , fCanMapVB(canMapVB)
|
| , fVertices(nullptr) {
|
| }
|
| SkPoint* lock(int vertexCount) override {
|
| size_t size = vertexCount * sizeof(SkPoint);
|
| - if (!fVertexBuffer.get() || fVertexBuffer->gpuMemorySize() < size) {
|
| - fVertexBuffer.reset(fResourceProvider->createVertexBuffer(
|
| - size, GrResourceProvider::kStatic_BufferUsage, 0));
|
| - }
|
| + fVertexBuffer.reset(fResourceProvider->createVertexBuffer(
|
| + size, GrResourceProvider::kStatic_BufferUsage, 0));
|
| if (!fVertexBuffer.get()) {
|
| return nullptr;
|
| }
|
| @@ -94,8 +89,9 @@ public:
|
| }
|
| fVertices = nullptr;
|
| }
|
| + GrVertexBuffer* vertexBuffer() { return fVertexBuffer.get(); }
|
| private:
|
| - SkAutoTUnref<GrVertexBuffer>& fVertexBuffer;
|
| + SkAutoTUnref<GrVertexBuffer> fVertexBuffer;
|
| GrResourceProvider* fResourceProvider;
|
| bool fCanMapVB;
|
| SkPoint* fVertices;
|
| @@ -162,13 +158,14 @@ private:
|
| fStroke.asUniqueKeyFragment(&builder[2 + clipBoundsSize32]);
|
| builder.finish();
|
| GrResourceProvider* rp = target->resourceProvider();
|
| - SkAutoTUnref<GrVertexBuffer> vertexBuffer(rp->findAndRefTByUniqueKey<GrVertexBuffer>(key));
|
| + SkAutoTUnref<GrVertexBuffer> cachedVertexBuffer(
|
| + rp->findAndRefTByUniqueKey<GrVertexBuffer>(key));
|
| int actualCount;
|
| SkScalar screenSpaceTol = GrPathUtils::kDefaultTolerance;
|
| SkScalar tol = GrPathUtils::scaleToleranceToSrc(
|
| screenSpaceTol, fViewMatrix, fPath.getBounds());
|
| - if (cache_match(vertexBuffer.get(), tol, &actualCount)) {
|
| - this->drawVertices(target, gp, vertexBuffer.get(), 0, actualCount);
|
| + if (cache_match(cachedVertexBuffer.get(), tol, &actualCount)) {
|
| + this->drawVertices(target, gp, cachedVertexBuffer.get(), 0, actualCount);
|
| return;
|
| }
|
|
|
| @@ -190,19 +187,19 @@ private:
|
| }
|
| bool isLinear;
|
| bool canMapVB = GrCaps::kNone_MapFlags != target->caps().mapBufferFlags();
|
| - StaticVertexAllocator allocator(vertexBuffer, target->resourceProvider(), canMapVB);
|
| + StaticVertexAllocator allocator(rp, canMapVB);
|
| int count = GrTessellator::PathToTriangles(path, tol, fClipBounds, &allocator, &isLinear);
|
| if (count == 0) {
|
| return;
|
| }
|
| - this->drawVertices(target, gp, vertexBuffer.get(), 0, count);
|
| + this->drawVertices(target, gp, allocator.vertexBuffer(), 0, count);
|
| if (!fPath.isVolatile()) {
|
| TessInfo info;
|
| info.fTolerance = isLinear ? 0 : tol;
|
| info.fCount = count;
|
| SkAutoTUnref<SkData> data(SkData::NewWithCopy(&info, sizeof(info)));
|
| key.setCustomData(data.get());
|
| - target->resourceProvider()->assignUniqueKeyToResource(key, vertexBuffer.get());
|
| + rp->assignUniqueKeyToResource(key, allocator.vertexBuffer());
|
| SkPathPriv::AddGenIDChangeListener(fPath, new PathInvalidator(key));
|
| }
|
| }
|
|
|