Index: gm/convexpolyeffect.cpp |
diff --git a/gm/convexpolyeffect.cpp b/gm/convexpolyeffect.cpp |
index 0a3be28c73a81146383fb02a0bfd2d949020e944..281ddca77e873249b97792ccb0a1bc38993a8094 100644 |
--- a/gm/convexpolyeffect.cpp |
+++ b/gm/convexpolyeffect.cpp |
@@ -12,13 +12,10 @@ |
#if SK_SUPPORT_GPU |
-#include "GrBatchTarget.h" |
-#include "GrBufferAllocPool.h" |
#include "GrContext.h" |
#include "GrDefaultGeoProcFactory.h" |
#include "GrPathUtils.h" |
#include "GrTest.h" |
-#include "GrTestBatch.h" |
#include "SkColorPriv.h" |
#include "SkDevice.h" |
#include "SkGeometry.h" |
@@ -27,68 +24,6 @@ |
#include "effects/GrConvexPolyEffect.h" |
namespace skiagm { |
- |
-class ConvexPolyTestBatch : public GrTestBatch { |
-public: |
- struct Geometry : public GrTestBatch::Geometry { |
- SkRect fBounds; |
- }; |
- |
- const char* name() const SK_OVERRIDE { return "ConvexPolyTestBatch"; } |
- |
- static GrBatch* Create(const GrGeometryProcessor* gp, const Geometry& geo) { |
- return SkNEW_ARGS(ConvexPolyTestBatch, (gp, geo)); |
- } |
- |
-private: |
- ConvexPolyTestBatch(const GrGeometryProcessor* gp, const Geometry& geo) |
- : INHERITED(gp) |
- , fGeometry(geo) { |
- } |
- |
- Geometry* geoData(int index) SK_OVERRIDE { |
- SkASSERT(0 == index); |
- return &fGeometry; |
- } |
- |
- void onGenerateGeometry(GrBatchTarget* batchTarget, const GrPipeline* pipeline) SK_OVERRIDE { |
- size_t vertexStride = this->geometryProcessor()->getVertexStride(); |
- |
- const GrVertexBuffer* vertexBuffer; |
- int firstVertex; |
- |
- void* vertices = batchTarget->vertexPool()->makeSpace(vertexStride, |
- kVertsPerCubic, |
- &vertexBuffer, |
- &firstVertex); |
- |
- SkASSERT(vertexStride == sizeof(SkPoint)); |
- SkPoint* verts = reinterpret_cast<SkPoint*>(vertices); |
- |
- // Make sure any artifacts around the exterior of path are visible by using overly |
- // conservative bounding geometry. |
- fGeometry.fBounds.outset(5.f, 5.f); |
- fGeometry.fBounds.toQuad(verts); |
- |
- GrDrawTarget::DrawInfo drawInfo; |
- drawInfo.setPrimitiveType(kTriangleFan_GrPrimitiveType); |
- drawInfo.setVertexBuffer(vertexBuffer); |
- drawInfo.setStartVertex(firstVertex); |
- drawInfo.setVertexCount(kVertsPerCubic); |
- drawInfo.setStartIndex(0); |
- drawInfo.setIndexCount(kIndicesPerCubic); |
- drawInfo.setIndexBuffer(batchTarget->quadIndexBuffer()); |
- batchTarget->draw(drawInfo); |
- } |
- |
- Geometry fGeometry; |
- |
- static const int kVertsPerCubic = 4; |
- static const int kIndicesPerCubic = 6; |
- |
- typedef GrTestBatch INHERITED; |
-}; |
- |
/** |
* This GM directly exercises a GrProcessor that draws convex polygons. |
*/ |
@@ -168,10 +103,6 @@ |
return; |
} |
- SkAutoTUnref<const GrGeometryProcessor> gp( |
- GrDefaultGeoProcFactory::Create(GrDefaultGeoProcFactory::kPosition_GPType, |
- 0xff000000)); |
- |
SkScalar y = 0; |
for (SkTLList<SkPath>::Iter iter(fPaths, SkTLList<SkPath>::Iter::kHead_IterStart); |
iter.get(); |
@@ -198,16 +129,25 @@ |
} |
GrPipelineBuilder pipelineBuilder; |
+ SkAutoTUnref<const GrGeometryProcessor> gp( |
+ GrDefaultGeoProcFactory::Create(GrDefaultGeoProcFactory::kPosition_GPType, |
+ 0xff000000)); |
pipelineBuilder.addCoverageProcessor(fp); |
pipelineBuilder.setRenderTarget(rt); |
- ConvexPolyTestBatch::Geometry geometry; |
- geometry.fColor = gp->color(); |
- geometry.fBounds = p.getBounds(); |
- |
- SkAutoTUnref<GrBatch> batch(ConvexPolyTestBatch::Create(gp, geometry)); |
- |
- tt.target()->drawBatch(&pipelineBuilder, batch, NULL); |
+ GrDrawTarget::AutoReleaseGeometry geo(tt.target(), 4, gp->getVertexStride(), 0); |
+ SkASSERT(gp->getVertexStride() == sizeof(SkPoint)); |
+ SkPoint* verts = reinterpret_cast<SkPoint*>(geo.vertices()); |
+ |
+ SkRect bounds = p.getBounds(); |
+ // Make sure any artifacts around the exterior of path are visible by using overly |
+ // conservative bounding geometry. |
+ bounds.outset(5.f, 5.f); |
+ bounds.toQuad(verts); |
+ |
+ tt.target()->setIndexSourceToBuffer(context->getQuadIndexBuffer()); |
+ tt.target()->drawIndexed(&pipelineBuilder, gp, kTriangleFan_GrPrimitiveType, |
+ 0, 0, 4, 6); |
x += SkScalarCeilToScalar(path->getBounds().width() + 10.f); |
} |
@@ -247,16 +187,23 @@ |
} |
GrPipelineBuilder pipelineBuilder; |
+ SkAutoTUnref<const GrGeometryProcessor> gp( |
+ GrDefaultGeoProcFactory::Create(GrDefaultGeoProcFactory::kPosition_GPType, |
+ 0xff000000)); |
pipelineBuilder.addCoverageProcessor(fp); |
pipelineBuilder.setRenderTarget(rt); |
- ConvexPolyTestBatch::Geometry geometry; |
- geometry.fColor = gp->color(); |
- geometry.fBounds = rect; |
- |
- SkAutoTUnref<GrBatch> batch(ConvexPolyTestBatch::Create(gp, geometry)); |
- |
- tt.target()->drawBatch(&pipelineBuilder, batch, NULL); |
+ GrDrawTarget::AutoReleaseGeometry geo(tt.target(), 4, gp->getVertexStride(), 0); |
+ SkASSERT(gp->getVertexStride() == sizeof(SkPoint)); |
+ SkPoint* verts = reinterpret_cast<SkPoint*>(geo.vertices()); |
+ |
+ SkRect bounds = rect; |
+ bounds.outset(5.f, 5.f); |
+ bounds.toQuad(verts); |
+ |
+ tt.target()->setIndexSourceToBuffer(context->getQuadIndexBuffer()); |
+ tt.target()->drawIndexed(&pipelineBuilder, gp, kTriangleFan_GrPrimitiveType, |
+ 0, 0, 4, 6); |
x += SkScalarCeilToScalar(rect.width() + 10.f); |
} |