aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar bsalomon@google.com <bsalomon@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-03-07 19:13:28 +0000
committerGravatar bsalomon@google.com <bsalomon@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-03-07 19:13:28 +0000
commitb372942bbc842b5728cbc8e9dd024928a793846a (patch)
treefdbd249d5f171ac21b2a2f5544d2130ed3057491
parentbb2d36dfc9168da1a220777508720c0b10a2ae94 (diff)
make pathrenderers release their geometry before returning
Review URL: http://codereview.appspot.com/5753073/ git-svn-id: http://skia.googlecode.com/svn/trunk@3335 2bbb7eff-a529-9590-31e7-b0007b416f81
-rw-r--r--src/gpu/GrAAConvexPathRenderer.cpp11
-rw-r--r--src/gpu/GrAAHairLinePathRenderer.cpp24
-rw-r--r--src/gpu/GrAAHairLinePathRenderer.h3
-rw-r--r--src/gpu/GrDefaultPathRenderer.cpp29
-rw-r--r--src/gpu/GrDefaultPathRenderer.h3
5 files changed, 35 insertions, 35 deletions
diff --git a/src/gpu/GrAAConvexPathRenderer.cpp b/src/gpu/GrAAConvexPathRenderer.cpp
index 029d493522..d1715e9079 100644
--- a/src/gpu/GrAAConvexPathRenderer.cpp
+++ b/src/gpu/GrAAConvexPathRenderer.cpp
@@ -505,15 +505,12 @@ bool GrAAConvexPathRenderer::onDrawPath(const SkPath& origPath,
return false;
}
- if (!target->reserveVertexSpace(layout,
- vCount,
- reinterpret_cast<void**>(&verts))) {
- return false;
- }
- if (!target->reserveIndexSpace(iCount, reinterpret_cast<void**>(&idxs))) {
- target->resetVertexSource();
+ GrDrawTarget::AutoReleaseGeometry arg(target, layout, vCount, iCount);
+ if (!arg.succeeded()) {
return false;
}
+ verts = reinterpret_cast<QuadVertex*>(arg.vertices());
+ idxs = reinterpret_cast<uint16_t*>(arg.indices());
create_vertices(segments, fanPt, verts, idxs);
diff --git a/src/gpu/GrAAHairLinePathRenderer.cpp b/src/gpu/GrAAHairLinePathRenderer.cpp
index 3ed4488f2b..527c18b36b 100644
--- a/src/gpu/GrAAHairLinePathRenderer.cpp
+++ b/src/gpu/GrAAHairLinePathRenderer.cpp
@@ -500,12 +500,14 @@ void add_line(const SkPoint p[2],
}
-bool GrAAHairLinePathRenderer::createGeom(const SkPath& path,
- const GrVec* translate,
- GrDrawTarget* target,
- GrDrawState::StageMask stageMask,
- int* lineCnt,
- int* quadCnt) {
+bool GrAAHairLinePathRenderer::createGeom(
+ const SkPath& path,
+ const GrVec* translate,
+ GrDrawTarget* target,
+ GrDrawState::StageMask stageMask,
+ int* lineCnt,
+ int* quadCnt,
+ GrDrawTarget::AutoReleaseGeometry* arg) {
const GrDrawState& drawState = target->getDrawState();
int rtHeight = drawState.getRenderTarget()->height();
@@ -542,11 +544,12 @@ bool GrAAHairLinePathRenderer::createGeom(const SkPath& path,
GrAssert(sizeof(Vertex) == GrDrawTarget::VertexSize(layout));
- Vertex* verts;
- if (!target->reserveVertexSpace(layout, vertCnt, (void**)&verts)) {
+ if (!arg->set(target, layout, vertCnt, 0)) {
return false;
}
+ Vertex* verts = reinterpret_cast<Vertex*>(arg->vertices());
+
const GrMatrix* toDevice = NULL;
const GrMatrix* toSrc = NULL;
GrMatrix ivm;
@@ -597,13 +600,14 @@ bool GrAAHairLinePathRenderer::onDrawPath(const SkPath& path,
int lineCnt;
int quadCnt;
-
+ GrDrawTarget::AutoReleaseGeometry arg;
if (!this->createGeom(path,
translate,
target,
stageMask,
&lineCnt,
- &quadCnt)) {
+ &quadCnt,
+ &arg)) {
return false;
}
diff --git a/src/gpu/GrAAHairLinePathRenderer.h b/src/gpu/GrAAHairLinePathRenderer.h
index 33b73320aa..6dd9ea9f98 100644
--- a/src/gpu/GrAAHairLinePathRenderer.h
+++ b/src/gpu/GrAAHairLinePathRenderer.h
@@ -40,7 +40,8 @@ private:
GrDrawTarget* target,
GrDrawState::StageMask stageMask,
int* lineCnt,
- int* quadCnt);
+ int* quadCnt,
+ GrDrawTarget::AutoReleaseGeometry* arg);
const GrIndexBuffer* fLinesIndexBuffer;
const GrIndexBuffer* fQuadsIndexBuffer;
diff --git a/src/gpu/GrDefaultPathRenderer.cpp b/src/gpu/GrDefaultPathRenderer.cpp
index 72b3c60c2a..7130bb5e27 100644
--- a/src/gpu/GrDefaultPathRenderer.cpp
+++ b/src/gpu/GrDefaultPathRenderer.cpp
@@ -189,7 +189,8 @@ bool GrDefaultPathRenderer::createGeom(const SkPath& path,
GrDrawState::StageMask stageMask,
GrPrimitiveType* primType,
int* vertexCnt,
- int* indexCnt) {
+ int* indexCnt,
+ GrDrawTarget::AutoReleaseGeometry* arg) {
{
SK_TRACE_EVENT0("GrDefaultPathRenderer::createGeom");
@@ -232,24 +233,18 @@ bool GrDefaultPathRenderer::createGeom(const SkPath& path,
}
}
- GrPoint* base;
- if (!target->reserveVertexSpace(layout, maxPts, (void**)&base)) {
+
+ if (!arg->set(target, layout, maxPts, maxIdxs)) {
return false;
}
- GrAssert(NULL != base);
- GrPoint* vert = base;
- uint16_t* idxBase = NULL;
- uint16_t* idx = NULL;
+ uint16_t* idxBase = reinterpret_cast<uint16_t*>(arg->indices());;
+ uint16_t* idx = idxBase;
uint16_t subpathIdxStart = 0;
- if (indexed) {
- if (!target->reserveIndexSpace(maxIdxs, (void**)&idxBase)) {
- target->resetVertexSource();
- return false;
- }
- GrAssert(NULL != idxBase);
- idx = idxBase;
- }
+
+ GrPoint* base = reinterpret_cast<GrPoint*>(arg->vertices());
+ GrAssert(NULL != base);
+ GrPoint* vert = base;
GrPoint pts[4];
@@ -350,6 +345,7 @@ bool GrDefaultPathRenderer::internalDrawPath(const SkPath& path,
int vertexCnt;
int indexCnt;
GrPrimitiveType primType;
+ GrDrawTarget::AutoReleaseGeometry arg;
if (!this->createGeom(path,
fill,
translate,
@@ -358,7 +354,8 @@ bool GrDefaultPathRenderer::internalDrawPath(const SkPath& path,
stageMask,
&primType,
&vertexCnt,
- &indexCnt)) {
+ &indexCnt,
+ &arg)) {
return false;
}
diff --git a/src/gpu/GrDefaultPathRenderer.h b/src/gpu/GrDefaultPathRenderer.h
index a6a4cda84d..d5b973892a 100644
--- a/src/gpu/GrDefaultPathRenderer.h
+++ b/src/gpu/GrDefaultPathRenderer.h
@@ -58,7 +58,8 @@ private:
GrDrawState::StageMask stages,
GrPrimitiveType* primType,
int* vertexCnt,
- int* indexCnt);
+ int* indexCnt,
+ GrDrawTarget::AutoReleaseGeometry* arg);
bool fSeparateStencil;
bool fStencilWrapOps;