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

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: Fix more windows trivial warningswq 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..26b54522b52abae4fc9142446726d9871ac6431e 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,12 +457,13 @@ 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[], PathTransformType transformsType,
+ SkPath::FillType fill, const GrDeviceCoordTexture* dstCopy) {
+ SkASSERT(NULL != pathRange);
+ SkASSERT(NULL != indices);
+ SkASSERT(NULL != transforms);
if (this->needsNewClip()) {
this->recordClip();
@@ -471,18 +472,17 @@ 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.reset(SkRef(pathRange));
+ dp->fIndices = SkNEW_ARRAY(uint32_t, count); // TODO: Accomplish this without a malloc
+ memcpy(dp->fIndices, indices, sizeof(uint32_t) * count);
+ dp->fCount = count;
- dp->fTransforms = SkNEW_ARRAY(SkMatrix, pathCount);
- memcpy(dp->fTransforms, transforms, sizeof(SkMatrix) * pathCount);
+ const int transformsLength = PathTransformSize(transformsType) * count;
+ dp->fTransforms = SkNEW_ARRAY(float, transformsLength);
+ memcpy(dp->fTransforms, transforms, sizeof(float) * transformsLength);
+ dp->fTransformsType = transformsType;
dp->fFill = fill;
- dp->fStroke = stroke;
if (NULL != dstCopy) {
dp->fDstCopy = *dstCopy;
@@ -633,9 +633,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->fTransformsType,
+ drawPathsIter->fFill,
+ dstCopy);
break;
}
case kSetState_Cmd:
« src/gpu/GrDrawTarget.h ('K') | « src/gpu/GrInOrderDrawBuffer.h ('k') | src/gpu/GrPath.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698