| Index: src/gpu/GrContext.cpp
|
| diff --git a/src/gpu/GrContext.cpp b/src/gpu/GrContext.cpp
|
| index bfbce359a4be87726837a21c495a768b41ef2b6c..9d07fdfd9cdfedbbbda23996402c97c2dadacc55 100755
|
| --- a/src/gpu/GrContext.cpp
|
| +++ b/src/gpu/GrContext.cpp
|
| @@ -315,8 +315,8 @@
|
|
|
| uint32_t flags = GrDefaultGeoProcFactory::kPosition_GPType |
|
| GrDefaultGeoProcFactory::kLocalCoord_GPType;
|
| - SkAutoTUnref<const GrGeometryProcessor> gp(
|
| - GrDefaultGeoProcFactory::Create(GrColor_WHITE, flags));
|
| + const GrGeometryProcessor* gp = GrDefaultGeoProcFactory::Create(GrColor_WHITE, flags);
|
| + drawState.setGeometryProcessor(gp)->unref();
|
|
|
| GrDrawTarget::AutoReleaseGeometry arg(fDrawBuffer, 4, gp->getVertexStride(), 0);
|
| SkASSERT(gp->getVertexStride() == 2 * sizeof(SkPoint));
|
| @@ -325,7 +325,7 @@
|
| SkPoint* verts = (SkPoint*) arg.vertices();
|
| verts[0].setIRectFan(0, 0, texture->width(), texture->height(), 2 * sizeof(SkPoint));
|
| verts[1].setIRectFan(0, 0, 1, 1, 2 * sizeof(SkPoint));
|
| - fDrawBuffer->drawNonIndexed(&drawState, gp, kTriangleFan_GrPrimitiveType, 0, 4);
|
| + fDrawBuffer->drawNonIndexed(&drawState, kTriangleFan_GrPrimitiveType, 0, 4);
|
| }
|
| } else {
|
| // TODO: Our CPU stretch doesn't filter. But we create separate
|
| @@ -758,7 +758,8 @@
|
| // unitSquareVertexBuffer()
|
|
|
| static const int worstCaseVertCount = 10;
|
| - SkAutoTUnref<const GrGeometryProcessor> gp(GrDefaultGeoProcFactory::Create(color));
|
| + const GrGeometryProcessor* gp = GrDefaultGeoProcFactory::Create(color);
|
| + drawState.setGeometryProcessor(gp)->unref();
|
| GrDrawTarget::AutoReleaseGeometry geo(target,
|
| worstCaseVertCount,
|
| gp->getVertexStride(),
|
| @@ -789,7 +790,7 @@
|
| vertex[4].set(rect.fLeft, rect.fTop);
|
| }
|
|
|
| - target->drawNonIndexed(&drawState, gp, primType, 0, vertCount);
|
| + target->drawNonIndexed(&drawState, primType, 0, vertCount);
|
| } else {
|
| // filled BW rect
|
| target->drawSimpleRect(&drawState, color, rect);
|
| @@ -812,11 +813,12 @@
|
| target->drawRect(&drawState, paint.getColor(), dstRect, &localRect, localMatrix);
|
| }
|
|
|
| -static const GrGeometryProcessor* set_vertex_attributes(const SkPoint* texCoords,
|
| - const GrColor* colors,
|
| - int* colorOffset,
|
| - int* texOffset,
|
| - GrColor color) {
|
| +static void set_vertex_attributes(GrDrawState* drawState,
|
| + const SkPoint* texCoords,
|
| + const GrColor* colors,
|
| + int* colorOffset,
|
| + int* texOffset,
|
| + GrColor color) {
|
| *texOffset = -1;
|
| *colorOffset = -1;
|
|
|
| @@ -833,7 +835,7 @@
|
| *colorOffset = sizeof(SkPoint);
|
| flags |= GrDefaultGeoProcFactory::kColor_GPType;
|
| }
|
| - return GrDefaultGeoProcFactory::Create(color, flags);
|
| + drawState->setGeometryProcessor(GrDefaultGeoProcFactory::Create(color, flags))->unref();
|
| }
|
|
|
| void GrContext::drawVertices(const GrPaint& paint,
|
| @@ -856,10 +858,10 @@
|
| GR_CREATE_TRACE_MARKER("GrContext::drawVertices", target);
|
|
|
| int colorOffset = -1, texOffset = -1;
|
| - SkAutoTUnref<const GrGeometryProcessor> gp(
|
| - set_vertex_attributes(texCoords, colors, &colorOffset, &texOffset, paint.getColor()));
|
| -
|
| - size_t vertexStride = gp->getVertexStride();
|
| + set_vertex_attributes(&drawState, texCoords, colors, &colorOffset, &texOffset,
|
| + paint.getColor());
|
| +
|
| + size_t vertexStride = drawState.getGeometryProcessor()->getVertexStride();
|
| SkASSERT(vertexStride == sizeof(SkPoint) + (SkToBool(texCoords) ? sizeof(SkPoint) : 0)
|
| + (SkToBool(colors) ? sizeof(GrColor) : 0));
|
| if (!geo.set(target, vertexCount, vertexStride, indexCount)) {
|
| @@ -887,9 +889,9 @@
|
| for (int i = 0; i < indexCount; ++i) {
|
| curIndex[i] = indices[i];
|
| }
|
| - target->drawIndexed(&drawState, gp, primitiveType, 0, 0, vertexCount, indexCount);
|
| + target->drawIndexed(&drawState, primitiveType, 0, 0, vertexCount, indexCount);
|
| } else {
|
| - target->drawNonIndexed(&drawState, gp, primitiveType, 0, vertexCount);
|
| + target->drawNonIndexed(&drawState, primitiveType, 0, vertexCount);
|
| }
|
| }
|
|
|
|
|