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

Side by Side Diff: src/gpu/GrDefaultPathRenderer.cpp

Issue 1293583002: Introduce GrBatch subclasses GrDrawBatch and GrVertexBatch to prepare for non-drawing batches (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: remove duplicated fields in GrVertexBatch Created 5 years, 4 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 unified diff | Download patch
« no previous file with comments | « src/gpu/GrCommandBuilder.h ('k') | src/gpu/GrDrawContext.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2011 Google Inc. 2 * Copyright 2011 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #include "GrDefaultPathRenderer.h" 8 #include "GrDefaultPathRenderer.h"
9 9
10 #include "GrBatchTarget.h" 10 #include "GrBatchTarget.h"
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after
202 srcSpaceTolSqd, vert, 202 srcSpaceTolSqd, vert,
203 GrPathUtils::quadraticPointCount(pts, srcSpaceTol)); 203 GrPathUtils::quadraticPointCount(pts, srcSpaceTol));
204 if (indexed) { 204 if (indexed) {
205 for (uint16_t i = 0; i < numPts; ++i) { 205 for (uint16_t i = 0; i < numPts; ++i) {
206 append_countour_edge_indices(isHairline, subpathIdxStart, 206 append_countour_edge_indices(isHairline, subpathIdxStart,
207 firstQPtIdx + i, idx); 207 firstQPtIdx + i, idx);
208 } 208 }
209 } 209 }
210 } 210 }
211 211
212 class DefaultPathBatch : public GrBatch { 212 class DefaultPathBatch : public GrVertexBatch {
213 public: 213 public:
214 struct Geometry { 214 struct Geometry {
215 GrColor fColor; 215 GrColor fColor;
216 SkPath fPath; 216 SkPath fPath;
217 SkScalar fTolerance; 217 SkScalar fTolerance;
218 }; 218 };
219 219
220 static GrBatch* Create(const Geometry& geometry, uint8_t coverage, const SkM atrix& viewMatrix, 220 static GrDrawBatch* Create(const Geometry& geometry, uint8_t coverage,
221 bool isHairline, const SkRect& devBounds) { 221 const SkMatrix& viewMatrix, bool isHairline,
222 const SkRect& devBounds) {
222 return SkNEW_ARGS(DefaultPathBatch, (geometry, coverage, viewMatrix, isH airline, 223 return SkNEW_ARGS(DefaultPathBatch, (geometry, coverage, viewMatrix, isH airline,
223 devBounds)); 224 devBounds));
224 } 225 }
225 226
226 const char* name() const override { return "DefaultPathBatch"; } 227 const char* name() const override { return "DefaultPathBatch"; }
227 228
228 void getInvariantOutputColor(GrInitInvariantOutput* out) const override { 229 void getInvariantOutputColor(GrInitInvariantOutput* out) const override {
229 // When this is called on a batch, there is only one geometry bundle 230 // When this is called on a batch, there is only one geometry bundle
230 out->setKnownFourComponents(fGeoData[0].fColor); 231 out->setKnownFourComponents(fGeoData[0].fColor);
231 } 232 }
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
380 this->initClassID<DefaultPathBatch>(); 381 this->initClassID<DefaultPathBatch>();
381 fBatch.fCoverage = coverage; 382 fBatch.fCoverage = coverage;
382 fBatch.fIsHairline = isHairline; 383 fBatch.fIsHairline = isHairline;
383 fBatch.fViewMatrix = viewMatrix; 384 fBatch.fViewMatrix = viewMatrix;
384 fGeoData.push_back(geometry); 385 fGeoData.push_back(geometry);
385 386
386 this->setBounds(devBounds); 387 this->setBounds(devBounds);
387 } 388 }
388 389
389 bool onCombineIfPossible(GrBatch* t, const GrCaps& caps) override { 390 bool onCombineIfPossible(GrBatch* t, const GrCaps& caps) override {
390 if (!GrPipeline::CanCombine(*this->pipeline(), this->bounds(), *t->pipel ine(), t->bounds(), 391 DefaultPathBatch* that = t->cast<DefaultPathBatch>();
391 caps)) { 392 if (!GrPipeline::CanCombine(*this->pipeline(), this->bounds(), *that->pi peline(),
393 that->bounds(), caps)) {
392 return false; 394 return false;
393 } 395 }
394 396
395 DefaultPathBatch* that = t->cast<DefaultPathBatch>();
396
397 if (this->color() != that->color()) { 397 if (this->color() != that->color()) {
398 return false; 398 return false;
399 } 399 }
400 400
401 if (this->coverage() != that->coverage()) { 401 if (this->coverage() != that->coverage()) {
402 return false; 402 return false;
403 } 403 }
404 404
405 if (!this->viewMatrix().cheapEqualTo(that->viewMatrix())) { 405 if (!this->viewMatrix().cheapEqualTo(that->viewMatrix())) {
406 return false; 406 return false;
(...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after
690 } else { 690 } else {
691 if (passCount > 1) { 691 if (passCount > 1) {
692 pipelineBuilder->setDisableColorXPFactory(); 692 pipelineBuilder->setDisableColorXPFactory();
693 } 693 }
694 694
695 DefaultPathBatch::Geometry geometry; 695 DefaultPathBatch::Geometry geometry;
696 geometry.fColor = color; 696 geometry.fColor = color;
697 geometry.fPath = path; 697 geometry.fPath = path;
698 geometry.fTolerance = srcSpaceTol; 698 geometry.fTolerance = srcSpaceTol;
699 699
700 SkAutoTUnref<GrBatch> batch(DefaultPathBatch::Create(geometry, newCo verage, viewMatrix, 700 SkAutoTUnref<GrDrawBatch> batch(DefaultPathBatch::Create(geometry, n ewCoverage,
701 isHairline, dev Bounds)); 701 viewMatrix, isHairline,
702 devBounds)) ;
702 703
703 target->drawBatch(*pipelineBuilder, batch); 704 target->drawBatch(*pipelineBuilder, batch);
704 } 705 }
705 } 706 }
706 return true; 707 return true;
707 } 708 }
708 709
709 bool GrDefaultPathRenderer::onCanDrawPath(const CanDrawPathArgs& args) const { 710 bool GrDefaultPathRenderer::onCanDrawPath(const CanDrawPathArgs& args) const {
710 // this class can draw any path with any fill but doesn't do any anti-aliasi ng. 711 // this class can draw any path with any fill but doesn't do any anti-aliasi ng.
711 return !args.fAntiAlias && (args.fStroke->isFillStyle() || 712 return !args.fAntiAlias && (args.fStroke->isFillStyle() ||
(...skipping 15 matching lines...) Expand all
727 SkASSERT(SkPath::kInverseEvenOdd_FillType != args.fPath->getFillType()); 728 SkASSERT(SkPath::kInverseEvenOdd_FillType != args.fPath->getFillType());
728 SkASSERT(SkPath::kInverseWinding_FillType != args.fPath->getFillType()); 729 SkASSERT(SkPath::kInverseWinding_FillType != args.fPath->getFillType());
729 this->internalDrawPath(args.fTarget, args.fPipelineBuilder, GrColor_WHITE, * args.fViewMatrix, 730 this->internalDrawPath(args.fTarget, args.fPipelineBuilder, GrColor_WHITE, * args.fViewMatrix,
730 *args.fPath, *args.fStroke, true); 731 *args.fPath, *args.fStroke, true);
731 } 732 }
732 733
733 //////////////////////////////////////////////////////////////////////////////// /////////////////// 734 //////////////////////////////////////////////////////////////////////////////// ///////////////////
734 735
735 #ifdef GR_TEST_UTILS 736 #ifdef GR_TEST_UTILS
736 737
737 BATCH_TEST_DEFINE(DefaultPathBatch) { 738 DRAW_BATCH_TEST_DEFINE(DefaultPathBatch) {
738 GrColor color = GrRandomColor(random); 739 GrColor color = GrRandomColor(random);
739 SkMatrix viewMatrix = GrTest::TestMatrix(random); 740 SkMatrix viewMatrix = GrTest::TestMatrix(random);
740 741
741 // For now just hairlines because the other types of draws require two batch es. 742 // For now just hairlines because the other types of draws require two batch es.
742 // TODO we should figure out a way to combine the stencil and cover steps in to one batch 743 // TODO we should figure out a way to combine the stencil and cover steps in to one batch
743 GrStrokeInfo stroke(SkStrokeRec::kHairline_InitStyle); 744 GrStrokeInfo stroke(SkStrokeRec::kHairline_InitStyle);
744 SkPath path = GrTest::TestPath(random); 745 SkPath path = GrTest::TestPath(random);
745 746
746 // Compute srcSpaceTol 747 // Compute srcSpaceTol
747 SkRect bounds = path.getBounds(); 748 SkRect bounds = path.getBounds();
748 SkScalar tol = GrPathUtils::kDefaultTolerance; 749 SkScalar tol = GrPathUtils::kDefaultTolerance;
749 SkScalar srcSpaceTol = GrPathUtils::scaleToleranceToSrc(tol, viewMatrix, bou nds); 750 SkScalar srcSpaceTol = GrPathUtils::scaleToleranceToSrc(tol, viewMatrix, bou nds);
750 751
751 DefaultPathBatch::Geometry geometry; 752 DefaultPathBatch::Geometry geometry;
752 geometry.fColor = color; 753 geometry.fColor = color;
753 geometry.fPath = path; 754 geometry.fPath = path;
754 geometry.fTolerance = srcSpaceTol; 755 geometry.fTolerance = srcSpaceTol;
755 756
756 viewMatrix.mapRect(&bounds); 757 viewMatrix.mapRect(&bounds);
757 uint8_t coverage = GrRandomCoverage(random); 758 uint8_t coverage = GrRandomCoverage(random);
758 return DefaultPathBatch::Create(geometry, coverage, viewMatrix, true, bounds ); 759 return DefaultPathBatch::Create(geometry, coverage, viewMatrix, true, bounds );
759 } 760 }
760 761
761 #endif 762 #endif
OLDNEW
« no previous file with comments | « src/gpu/GrCommandBuilder.h ('k') | src/gpu/GrDrawContext.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698