diff options
author | 2015-05-04 11:27:45 -0700 | |
---|---|---|
committer | 2015-05-04 11:27:45 -0700 | |
commit | f28381c6866cad92af8ebe5b9d2db074613b1963 (patch) | |
tree | e47de7c53417db3d49025d2f3204d9e1cf0923b1 /src/gpu/effects | |
parent | b327c3a84a90f966afa00c705f2e7f511321ef6e (diff) |
Start on simplifying generateGeometry() overrides
Review URL: https://codereview.chromium.org/1122673002
Diffstat (limited to 'src/gpu/effects')
-rw-r--r-- | src/gpu/effects/GrDashingEffect.cpp | 69 |
1 files changed, 19 insertions, 50 deletions
diff --git a/src/gpu/effects/GrDashingEffect.cpp b/src/gpu/effects/GrDashingEffect.cpp index fa8b3a2dcf..b941d8be7d 100644 --- a/src/gpu/effects/GrDashingEffect.cpp +++ b/src/gpu/effects/GrDashingEffect.cpp @@ -19,7 +19,6 @@ #include "GrDrawTargetCaps.h" #include "GrInvariantOutput.h" #include "GrProcessor.h" -#include "GrResourceProvider.h" #include "GrStrokeInfo.h" #include "GrVertexBuffer.h" #include "SkGr.h" @@ -536,38 +535,29 @@ public: draw.fHasEndRect = hasEndRect; } - SkAutoTUnref<const GrIndexBuffer> indexBuffer( - batchTarget->resourceProvider()->refQuadIndexBuffer()); - - const GrVertexBuffer* vertexBuffer; - int firstVertex; - size_t vertexStride = gp->getVertexStride(); - void* vertices = batchTarget->vertexPool()->makeSpace(vertexStride, - totalRectCount * kVertsPerDash, - &vertexBuffer, - &firstVertex); - if (!vertices || !indexBuffer) { - SkDebugf("Could not allocate buffers\n"); + QuadHelper helper; + void* vertices = helper.init(batchTarget, gp->getVertexStride(), instanceCount); + if (!vertices) { return; } int curVIdx = 0; int rectIndex = 0; for (int i = 0; i < instanceCount; i++) { - Geometry& args = fGeoData[i]; + Geometry& geom = fGeoData[i]; if (!draws[i].fLineDone) { if (fullDash) { - setup_dashed_rect(rects[rectIndex], vertices, curVIdx, args.fSrcRotInv, + setup_dashed_rect(rects[rectIndex], vertices, curVIdx, geom.fSrcRotInv, draws[i].fStartOffset, draws[i].fDevBloatX, draws[i].fDevBloatY, draws[i].fLineLength, - draws[i].fHalfDevStroke, args.fIntervals[0], - args.fIntervals[1], draws[i].fStrokeWidth, + draws[i].fHalfDevStroke, geom.fIntervals[0], + geom.fIntervals[1], draws[i].fStrokeWidth, capType, gp->getVertexStride()); } else { SkPoint* verts = reinterpret_cast<SkPoint*>(vertices); SkASSERT(gp->getVertexStride() == sizeof(SkPoint)); - setup_dashed_rect_pos(rects[rectIndex], curVIdx, args.fSrcRotInv, verts); + setup_dashed_rect_pos(rects[rectIndex], curVIdx, geom.fSrcRotInv, verts); } curVIdx += 4; } @@ -575,16 +565,16 @@ public: if (draws[i].fHasStartRect) { if (fullDash) { - setup_dashed_rect(rects[rectIndex], vertices, curVIdx, args.fSrcRotInv, + setup_dashed_rect(rects[rectIndex], vertices, curVIdx, geom.fSrcRotInv, draws[i].fStartOffset, draws[i].fDevBloatX, - draws[i].fDevBloatY, args.fIntervals[0], - draws[i].fHalfDevStroke, args.fIntervals[0], - args.fIntervals[1], draws[i].fStrokeWidth, capType, + draws[i].fDevBloatY, geom.fIntervals[0], + draws[i].fHalfDevStroke, geom.fIntervals[0], + geom.fIntervals[1], draws[i].fStrokeWidth, capType, gp->getVertexStride()); } else { SkPoint* verts = reinterpret_cast<SkPoint*>(vertices); SkASSERT(gp->getVertexStride() == sizeof(SkPoint)); - setup_dashed_rect_pos(rects[rectIndex], curVIdx, args.fSrcRotInv, verts); + setup_dashed_rect_pos(rects[rectIndex], curVIdx, geom.fSrcRotInv, verts); } curVIdx += 4; @@ -593,43 +583,22 @@ public: if (draws[i].fHasEndRect) { if (fullDash) { - setup_dashed_rect(rects[rectIndex], vertices, curVIdx, args.fSrcRotInv, + setup_dashed_rect(rects[rectIndex], vertices, curVIdx, geom.fSrcRotInv, draws[i].fStartOffset, draws[i].fDevBloatX, - draws[i].fDevBloatY, args.fIntervals[0], - draws[i].fHalfDevStroke, args.fIntervals[0], - args.fIntervals[1], draws[i].fStrokeWidth, capType, + draws[i].fDevBloatY, geom.fIntervals[0], + draws[i].fHalfDevStroke, geom.fIntervals[0], + geom.fIntervals[1], draws[i].fStrokeWidth, capType, gp->getVertexStride()); } else { SkPoint* verts = reinterpret_cast<SkPoint*>(vertices); SkASSERT(gp->getVertexStride() == sizeof(SkPoint)); - setup_dashed_rect_pos(rects[rectIndex], curVIdx, args.fSrcRotInv, verts); + setup_dashed_rect_pos(rects[rectIndex], curVIdx, geom.fSrcRotInv, verts); } curVIdx += 4; } rectIndex++; } - - GrDrawTarget::DrawInfo drawInfo; - drawInfo.setPrimitiveType(kTriangles_GrPrimitiveType); - drawInfo.setStartVertex(0); - drawInfo.setStartIndex(0); - drawInfo.setVerticesPerInstance(kVertsPerDash); - drawInfo.setIndicesPerInstance(kIndicesPerDash); - drawInfo.adjustStartVertex(firstVertex); - drawInfo.setVertexBuffer(vertexBuffer); - drawInfo.setIndexBuffer(indexBuffer); - - int maxInstancesPerDraw = indexBuffer->maxQuads(); - while (totalRectCount) { - drawInfo.setInstanceCount(SkTMin(totalRectCount, maxInstancesPerDraw)); - drawInfo.setVertexCount(drawInfo.instanceCount() * drawInfo.verticesPerInstance()); - drawInfo.setIndexCount(drawInfo.instanceCount() * drawInfo.indicesPerInstance()); - - batchTarget->draw(drawInfo); - - drawInfo.setStartVertex(drawInfo.startVertex() + drawInfo.vertexCount()); - totalRectCount -= drawInfo.instanceCount(); - } + helper.issueDraws(batchTarget); } SkSTArray<1, Geometry, true>* geoData() { return &fGeoData; } |