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
diff --git a/src/gpu/GrDefaultPathRenderer.cpp b/src/gpu/GrDefaultPathRenderer.cpp
index 72b3c60..7130bb5 100644
--- a/src/gpu/GrDefaultPathRenderer.cpp
+++ b/src/gpu/GrDefaultPathRenderer.cpp
@@ -189,7 +189,8 @@
GrDrawState::StageMask stageMask,
GrPrimitiveType* primType,
int* vertexCnt,
- int* indexCnt) {
+ int* indexCnt,
+ GrDrawTarget::AutoReleaseGeometry* arg) {
{
SK_TRACE_EVENT0("GrDefaultPathRenderer::createGeom");
@@ -232,25 +233,19 @@
}
}
- GrPoint* base;
- if (!target->reserveVertexSpace(layout, maxPts, (void**)&base)) {
+
+ if (!arg->set(target, layout, maxPts, maxIdxs)) {
return false;
}
+
+ uint16_t* idxBase = reinterpret_cast<uint16_t*>(arg->indices());;
+ uint16_t* idx = idxBase;
+ uint16_t subpathIdxStart = 0;
+
+ GrPoint* base = reinterpret_cast<GrPoint*>(arg->vertices());
GrAssert(NULL != base);
GrPoint* vert = base;
- uint16_t* idxBase = NULL;
- uint16_t* idx = NULL;
- uint16_t subpathIdxStart = 0;
- if (indexed) {
- if (!target->reserveIndexSpace(maxIdxs, (void**)&idxBase)) {
- target->resetVertexSource();
- return false;
- }
- GrAssert(NULL != idxBase);
- idx = idxBase;
- }
-
GrPoint pts[4];
bool first = true;
@@ -350,6 +345,7 @@
int vertexCnt;
int indexCnt;
GrPrimitiveType primType;
+ GrDrawTarget::AutoReleaseGeometry arg;
if (!this->createGeom(path,
fill,
translate,
@@ -358,7 +354,8 @@
stageMask,
&primType,
&vertexCnt,
- &indexCnt)) {
+ &indexCnt,
+ &arg)) {
return false;
}