Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(232)

Unified Diff: src/gpu/GrInOrderDrawBuffer.cpp

Issue 400713003: Add a GrPathRange class (Closed) Base URL: https://skia.googlesource.com/skia.git@clupload-ispath
Patch Set: Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/gpu/GrInOrderDrawBuffer.cpp
diff --git a/src/gpu/GrInOrderDrawBuffer.cpp b/src/gpu/GrInOrderDrawBuffer.cpp
index dfff24792ea66dedd83490e16c5b26ab60a18bb5..225d38cf29bd54380f80d835f0ef1a7cc2539c4d 100644
--- a/src/gpu/GrInOrderDrawBuffer.cpp
+++ b/src/gpu/GrInOrderDrawBuffer.cpp
@@ -13,6 +13,7 @@
#include "GrGpu.h"
#include "GrIndexBuffer.h"
#include "GrPath.h"
+#include "GrPathRange.h"
#include "GrRenderTarget.h"
#include "GrTemplates.h"
#include "GrTexture.h"
@@ -419,10 +420,9 @@ GrInOrderDrawBuffer::DrawPaths::~DrawPaths() {
if (fTransforms) {
SkDELETE_ARRAY(fTransforms);
}
- for (int i = 0; i < fPathCount; ++i) {
- fPaths[i]->unref();
+ if (fIndices) {
+ SkDELETE_ARRAY(fIndices);
}
- SkDELETE_ARRAY(fPaths);
}
void GrInOrderDrawBuffer::onStencilPath(const GrPath* path, SkPath::FillType fill) {
@@ -457,13 +457,10 @@ void GrInOrderDrawBuffer::onDrawPath(const GrPath* path,
}
}
-void GrInOrderDrawBuffer::onDrawPaths(int pathCount, const GrPath** paths,
- const SkMatrix* transforms,
- SkPath::FillType fill,
- SkStrokeRec::Style stroke,
- const GrDeviceCoordTexture* dstCopy) {
- SkASSERT(pathCount);
-
+void GrInOrderDrawBuffer::onDrawPaths(const GrPathRange* pathRange,
+ const uint32_t indices[], int count,
+ const float transforms[], GrTransformFormat transformsFormat,
+ SkPath::FillType fill, const GrDeviceCoordTexture* dstCopy) {
if (this->needsNewClip()) {
this->recordClip();
}
@@ -471,18 +468,16 @@ void GrInOrderDrawBuffer::onDrawPaths(int pathCount, const GrPath** paths,
this->recordState();
}
DrawPaths* dp = this->recordDrawPaths();
- dp->fPathCount = pathCount;
- dp->fPaths = SkNEW_ARRAY(const GrPath*, pathCount);
- memcpy(dp->fPaths, paths, sizeof(GrPath*) * pathCount);
- for (int i = 0; i < pathCount; ++i) {
- dp->fPaths[i]->ref();
- }
+ dp->fPathRange = pathRange;
+ dp->fIndices = SkNEW_ARRAY(uint32_t, count); // TODO: Accomplish this without a malloc
bsalomon 2014/07/17 17:27:28 What's the plan here? An immutable ref-cnt'ed arra
Chris Dalton 2014/07/17 18:15:19 I don't quite see where you are going with the imm
bsalomon 2014/07/21 14:11:08 I was thinking that drawPaths() could take a index
+ memcpy(dp->fIndices, indices, sizeof(uint32_t) * count);
+ dp->fCount = count;
- dp->fTransforms = SkNEW_ARRAY(SkMatrix, pathCount);
- memcpy(dp->fTransforms, transforms, sizeof(SkMatrix) * pathCount);
+ dp->fTransforms = SkNEW_ARRAY(float, GrTransformSize(transformsFormat) * count);
+ memcpy(dp->fTransforms, transforms, sizeof(float) * GrTransformSize(transformsFormat) * count);
+ dp->fTransformsFormat = transformsFormat;
dp->fFill = fill;
- dp->fStroke = stroke;
if (NULL != dstCopy) {
dp->fDstCopy = *dstCopy;
@@ -633,9 +628,13 @@ void GrInOrderDrawBuffer::flush() {
SkAssertResult(drawPathsIter.next());
const GrDeviceCoordTexture* dstCopy =
NULL !=drawPathsIter->fDstCopy.texture() ? &drawPathsIter->fDstCopy : NULL;
- fDstGpu->executeDrawPaths(drawPathsIter->fPathCount, drawPathsIter->fPaths,
- drawPathsIter->fTransforms, drawPathsIter->fFill,
- drawPathsIter->fStroke, dstCopy);
+ fDstGpu->executeDrawPaths(drawPathsIter->fPathRange.get(),
+ drawPathsIter->fIndices,
+ drawPathsIter->fCount,
+ drawPathsIter->fTransforms,
+ drawPathsIter->fTransformsFormat,
+ drawPathsIter->fFill,
+ dstCopy);
break;
}
case kSetState_Cmd:

Powered by Google App Engine
This is Rietveld 408576698