Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(53)

Unified Diff: gm/convexpolyeffect.cpp

Issue 1835283002: Simplify GrDrawBatch uploads and token uage. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: add comments Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: gm/convexpolyeffect.cpp
diff --git a/gm/convexpolyeffect.cpp b/gm/convexpolyeffect.cpp
index 57ee30731d856212cd4d220b718f8e307978a7d9..0cdea2c3f296ff1a19fdc4edf050fa6998106a20 100644
--- a/gm/convexpolyeffect.cpp
+++ b/gm/convexpolyeffect.cpp
@@ -27,45 +27,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));
@@ -73,12 +71,12 @@ private:
return;
}
- fGeometry.fRect.toQuad(verts);
+ fRect.toQuad(verts);
- helper.recordDraw(target);
+ helper.recordDraw(target, gp);
}
- Geometry fGeometry;
+ SkRect fRect;
typedef GrTestBatch INHERITED;
};
@@ -152,7 +150,6 @@ protected:
}
void onDraw(SkCanvas* canvas) override {
- using namespace GrDefaultGeoProcFactory;
GrRenderTarget* rt = canvas->internal_private_accessTopLayerRenderTarget();
if (nullptr == rt) {
skiagm::GM::DrawGpuOnlyMessage(canvas);
@@ -168,12 +165,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;
for (PathList::Iter iter(fPaths, PathList::Iter::kHead_IterStart);
iter.get();
@@ -198,12 +189,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);
@@ -244,13 +230,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);
« no previous file with comments | « gm/beziereffects.cpp ('k') | src/gpu/GrBatchAtlas.h » ('j') | src/gpu/batches/GrDrawBatch.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698