aboutsummaryrefslogtreecommitdiffhomepage
path: root/gm/convexpolyeffect.cpp
diff options
context:
space:
mode:
authorGravatar bsalomon <bsalomon@google.com>2016-04-01 06:06:20 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2016-04-01 06:06:20 -0700
commit342bfc25de5b0452b1551bf9db4bf45eac7718b2 (patch)
tree5d54f2ecb1ec17f7848500df30c4f6d40c5b9ae8 /gm/convexpolyeffect.cpp
parent38d68bc31d69ea9793d925dd3c7d4337330b2b7b (diff)
Simplify GrDrawBatch uploads and token uage.
GrVertexBatch subclasses no longer need "initDraw". Simplifies GrTestBatch BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1835283002 Review URL: https://codereview.chromium.org/1835283002
Diffstat (limited to 'gm/convexpolyeffect.cpp')
-rw-r--r--gm/convexpolyeffect.cpp84
1 files changed, 32 insertions, 52 deletions
diff --git a/gm/convexpolyeffect.cpp b/gm/convexpolyeffect.cpp
index aec571bcd6..f8d184958d 100644
--- a/gm/convexpolyeffect.cpp
+++ b/gm/convexpolyeffect.cpp
@@ -26,45 +26,43 @@
#include "effects/GrConvexPolyEffect.h"
-namespace skiagm {
+/** outset rendered rect to visualize anti-aliased poly edges */
+static SkRect outset(const SkRect& unsorted) {
+ SkRect r = unsorted;
+ r.outset(5.f, 5.f);
+ return r;
+}
-class ConvexPolyTestBatch : public GrTestBatch {
+/** sorts a rect */
+static SkRect sorted_rect(const SkRect& unsorted) {
+ SkRect r = unsorted;
+ r.sort();
+ return r;
+}
+
+namespace skiagm {
+class PolyBoundsBatch : public GrTestBatch {
public:
DEFINE_BATCH_CLASS_ID
- struct Geometry : public GrTestBatch::Geometry {
- SkRect fRect;
- SkRect fBounds; // This will be == fRect, except fBounds must be sorted, whereas fRect can
- // be inverted
- };
- const char* name() const override { return "ConvexPolyTestBatch"; }
+ const char* name() const override { return "PolyBoundsBatch"; }
- static GrDrawBatch* Create(const GrGeometryProcessor* gp, const Geometry& geo) {
- return new ConvexPolyTestBatch(gp, geo);
+ PolyBoundsBatch(const SkRect& rect, GrColor color)
+ : INHERITED(ClassID(), outset(sorted_rect(rect)), color)
+ , fRect(outset(rect)) {
}
private:
- ConvexPolyTestBatch(const GrGeometryProcessor* gp, const Geometry& geo)
- : INHERITED(ClassID(), gp, geo.fBounds)
- , fGeometry(geo) {
- // 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.fRect.outset(5.f, 5.f);
- }
-
- Geometry* geoData(int index) override {
- SkASSERT(0 == index);
- return &fGeometry;
- }
+ void onPrepareDraws(Target* target) const override {
+ using namespace GrDefaultGeoProcFactory;
- const Geometry* geoData(int index) const override {
- SkASSERT(0 == index);
- return &fGeometry;
- }
+ Color color(this->color());
+ Coverage coverage(Coverage::kSolid_Type);
+ LocalCoords localCoords(LocalCoords::kUnused_Type);
+ SkAutoTUnref<const GrGeometryProcessor> gp(
+ GrDefaultGeoProcFactory::Create(color, coverage, localCoords, SkMatrix::I()));
- void generateGeometry(Target* target) const override {
- size_t vertexStride = this->geometryProcessor()->getVertexStride();
+ size_t vertexStride = gp->getVertexStride();
SkASSERT(vertexStride == sizeof(SkPoint));
QuadHelper helper;
SkPoint* verts = reinterpret_cast<SkPoint*>(helper.init(target, vertexStride, 1));
@@ -72,12 +70,12 @@ private:
return;
}
- fGeometry.fRect.toQuad(verts);
+ fRect.toQuad(verts);
- helper.recordDraw(target);
+ helper.recordDraw(target, gp);
}
- Geometry fGeometry;
+ SkRect fRect;
typedef GrTestBatch INHERITED;
};
@@ -156,7 +154,6 @@ protected:
}
void onDraw(SkCanvas* canvas) override {
- using namespace GrDefaultGeoProcFactory;
GrRenderTarget* rt = canvas->internal_private_accessTopLayerRenderTarget();
if (nullptr == rt) {
skiagm::GM::DrawGpuOnlyMessage(canvas);
@@ -172,12 +169,6 @@ protected:
return;
}
- Color color(0xff000000);
- Coverage coverage(Coverage::kSolid_Type);
- LocalCoords localCoords(LocalCoords::kUnused_Type);
- SkAutoTUnref<const GrGeometryProcessor> gp(
- GrDefaultGeoProcFactory::Create(color, coverage, localCoords, SkMatrix::I()));
-
SkScalar y = 0;
static const SkScalar kDX = 12.f;
for (PathList::Iter iter(fPaths, PathList::Iter::kHead_IterStart);
@@ -203,12 +194,7 @@ protected:
pipelineBuilder.addCoverageFragmentProcessor(fp);
pipelineBuilder.setRenderTarget(rt);
- ConvexPolyTestBatch::Geometry geometry;
- geometry.fColor = color.fColor;
- geometry.fRect = p.getBounds();
- geometry.fBounds = p.getBounds();
-
- SkAutoTUnref<GrDrawBatch> batch(ConvexPolyTestBatch::Create(gp, geometry));
+ SkAutoTUnref<GrDrawBatch> batch(new PolyBoundsBatch(p.getBounds(), 0xff000000));
drawContext->drawContextPriv().testingOnly_drawBatch(pipelineBuilder, batch);
@@ -249,13 +235,7 @@ protected:
pipelineBuilder.addCoverageFragmentProcessor(fp);
pipelineBuilder.setRenderTarget(rt);
- ConvexPolyTestBatch::Geometry geometry;
- geometry.fColor = color.fColor;
- geometry.fRect = rect;
- geometry.fBounds = rect;
- geometry.fBounds.sort();
-
- SkAutoTUnref<GrDrawBatch> batch(ConvexPolyTestBatch::Create(gp, geometry));
+ SkAutoTUnref<GrDrawBatch> batch(new PolyBoundsBatch(rect, 0xff000000));
drawContext->drawContextPriv().testingOnly_drawBatch(pipelineBuilder, batch);