diff options
Diffstat (limited to 'src/gpu/GrOvalRenderer.cpp')
-rw-r--r-- | src/gpu/GrOvalRenderer.cpp | 43 |
1 files changed, 25 insertions, 18 deletions
diff --git a/src/gpu/GrOvalRenderer.cpp b/src/gpu/GrOvalRenderer.cpp index 22a18d2d10..eac6fb4a3a 100644 --- a/src/gpu/GrOvalRenderer.cpp +++ b/src/gpu/GrOvalRenderer.cpp @@ -144,8 +144,8 @@ private: return cee.fStroke == fStroke; } - virtual void onGetInvariantOutputCoverage(GrInitInvariantOutput* out) const SK_OVERRIDE { - out->setUnknownSingleComponent(); + virtual void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVERRIDE { + inout->mulByUnknownAlpha(); } const GrAttribute* fInPosition; @@ -290,8 +290,8 @@ private: return eee.fStroke == fStroke; } - virtual void onGetInvariantOutputCoverage(GrInitInvariantOutput* out) const SK_OVERRIDE { - out->setUnknownSingleComponent(); + virtual void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVERRIDE { + inout->mulByUnknownAlpha(); } const GrAttribute* fInPosition; @@ -455,8 +455,8 @@ private: return eee.fMode == fMode; } - virtual void onGetInvariantOutputCoverage(GrInitInvariantOutput* out) const SK_OVERRIDE { - out->setUnknownSingleComponent(); + virtual void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVERRIDE { + inout->mulByUnknownAlpha(); } const GrAttribute* fInPosition; @@ -562,8 +562,8 @@ void GrOvalRenderer::drawCircle(GrDrawTarget* target, } } - SkAutoTUnref<GrGeometryProcessor> gp( - CircleEdgeEffect::Create(color, isStrokeOnly && innerRadius > 0)); + GrGeometryProcessor* gp = CircleEdgeEffect::Create(color, isStrokeOnly && innerRadius > 0); + drawState->setGeometryProcessor(gp)->unref(); GrDrawTarget::AutoReleaseGeometry geo(target, 4, gp->getVertexStride(), 0); SkASSERT(gp->getVertexStride() == sizeof(CircleVertex)); @@ -609,7 +609,7 @@ void GrOvalRenderer::drawCircle(GrDrawTarget* target, verts[3].fInnerRadius = innerRadius; target->setIndexSourceToBuffer(context->getGpu()->getQuadIndexBuffer()); - target->drawIndexedInstances(drawState, gp, kTriangles_GrPrimitiveType, 1, 4, 6, &bounds); + target->drawIndexedInstances(drawState, kTriangles_GrPrimitiveType, 1, 4, 6, &bounds); target->resetIndexSource(); } @@ -689,8 +689,11 @@ bool GrOvalRenderer::drawEllipse(GrDrawTarget* target, return false; } - SkAutoTUnref<GrGeometryProcessor> gp( - EllipseEdgeEffect::Create(color, isStrokeOnly && innerXRadius > 0 && innerYRadius > 0)); + GrGeometryProcessor* gp = EllipseEdgeEffect::Create(color, + isStrokeOnly && + innerXRadius > 0 && innerYRadius > 0); + + drawState->setGeometryProcessor(gp)->unref(); GrDrawTarget::AutoReleaseGeometry geo(target, 4, gp->getVertexStride(), 0); SkASSERT(gp->getVertexStride() == sizeof(EllipseVertex)); @@ -741,7 +744,7 @@ bool GrOvalRenderer::drawEllipse(GrDrawTarget* target, verts[3].fInnerRadii = SkPoint::Make(xInnerRadRecip, yInnerRadRecip); target->setIndexSourceToBuffer(context->getGpu()->getQuadIndexBuffer()); - target->drawIndexedInstances(drawState, gp, kTriangles_GrPrimitiveType, 1, 4, 6, &bounds); + target->drawIndexedInstances(drawState, kTriangles_GrPrimitiveType, 1, 4, 6, &bounds); target->resetIndexSource(); return true; @@ -806,7 +809,9 @@ bool GrOvalRenderer::drawDIEllipse(GrDrawTarget* target, SkScalar innerRatioX = SkScalarDiv(xRadius, innerXRadius); SkScalar innerRatioY = SkScalarDiv(yRadius, innerYRadius); - SkAutoTUnref<GrGeometryProcessor> gp(DIEllipseEdgeEffect::Create(color, mode)); + GrGeometryProcessor* gp = DIEllipseEdgeEffect::Create(color, mode); + + drawState->setGeometryProcessor(gp)->unref(); GrDrawTarget::AutoReleaseGeometry geo(target, 4, gp->getVertexStride(), 0); SkASSERT(gp->getVertexStride() == sizeof(DIEllipseVertex)); @@ -852,7 +857,7 @@ bool GrOvalRenderer::drawDIEllipse(GrDrawTarget* target, verts[3].fInnerOffset = SkPoint::Make(innerRatioX + offsetDx, -innerRatioY - offsetDy); target->setIndexSourceToBuffer(context->getGpu()->getQuadIndexBuffer()); - target->drawIndexedInstances(drawState, gp, kTriangles_GrPrimitiveType, 1, 4, 6, &bounds); + target->drawIndexedInstances(drawState, kTriangles_GrPrimitiveType, 1, 4, 6, &bounds); target->resetIndexSource(); return true; @@ -1072,7 +1077,8 @@ bool GrOvalRenderer::drawRRect(GrDrawTarget* target, isStrokeOnly = (isStrokeOnly && innerRadius >= 0); - SkAutoTUnref<GrGeometryProcessor> effect(CircleEdgeEffect::Create(color, isStrokeOnly)); + GrGeometryProcessor* effect = CircleEdgeEffect::Create(color, isStrokeOnly); + drawState->setGeometryProcessor(effect)->unref(); GrDrawTarget::AutoReleaseGeometry geo(target, 16, effect->getVertexStride(), 0); SkASSERT(effect->getVertexStride() == sizeof(CircleVertex)); @@ -1134,7 +1140,7 @@ bool GrOvalRenderer::drawRRect(GrDrawTarget* target, int indexCnt = isStrokeOnly ? SK_ARRAY_COUNT(gRRectIndices) - 6 : SK_ARRAY_COUNT(gRRectIndices); target->setIndexSourceToBuffer(indexBuffer); - target->drawIndexedInstances(drawState, effect, kTriangles_GrPrimitiveType, 1, 16, indexCnt, + target->drawIndexedInstances(drawState, kTriangles_GrPrimitiveType, 1, 16, indexCnt, &bounds); // otherwise we use the ellipse renderer @@ -1173,7 +1179,8 @@ bool GrOvalRenderer::drawRRect(GrDrawTarget* target, isStrokeOnly = (isStrokeOnly && innerXRadius >= 0 && innerYRadius >= 0); - SkAutoTUnref<GrGeometryProcessor> effect(EllipseEdgeEffect::Create(color, isStrokeOnly)); + GrGeometryProcessor* effect = EllipseEdgeEffect::Create(color, isStrokeOnly); + drawState->setGeometryProcessor(effect)->unref(); GrDrawTarget::AutoReleaseGeometry geo(target, 16, effect->getVertexStride(), 0); SkASSERT(effect->getVertexStride() == sizeof(EllipseVertex)); @@ -1240,7 +1247,7 @@ bool GrOvalRenderer::drawRRect(GrDrawTarget* target, int indexCnt = isStrokeOnly ? SK_ARRAY_COUNT(gRRectIndices) - 6 : SK_ARRAY_COUNT(gRRectIndices); target->setIndexSourceToBuffer(indexBuffer); - target->drawIndexedInstances(drawState, effect, kTriangles_GrPrimitiveType, 1, 16, indexCnt, + target->drawIndexedInstances(drawState, kTriangles_GrPrimitiveType, 1, 16, indexCnt, &bounds); } |