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

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

Issue 1261083003: Use new API everywhere for GrDefaultGeoProcFactory (Closed) Base URL: https://skia.googlesource.com/skia.git@lccleanup2
Patch Set: feedback inc 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
OLDNEW
1 /* 1 /*
2 * Copyright 2012 Google Inc. 2 * Copyright 2012 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 "GrAARectRenderer.h" 8 #include "GrAARectRenderer.h"
9 #include "GrBatch.h" 9 #include "GrBatch.h"
10 #include "GrBatchTarget.h" 10 #include "GrBatchTarget.h"
(...skipping 12 matching lines...) Expand all
23 #include "gl/GrGLGeometryProcessor.h" 23 #include "gl/GrGLGeometryProcessor.h"
24 #include "gl/builders/GrGLProgramBuilder.h" 24 #include "gl/builders/GrGLProgramBuilder.h"
25 25
26 /////////////////////////////////////////////////////////////////////////////// 26 ///////////////////////////////////////////////////////////////////////////////
27 27
28 static void set_inset_fan(SkPoint* pts, size_t stride, 28 static void set_inset_fan(SkPoint* pts, size_t stride,
29 const SkRect& r, SkScalar dx, SkScalar dy) { 29 const SkRect& r, SkScalar dx, SkScalar dy) {
30 pts->setRectFan(r.fLeft + dx, r.fTop + dy, 30 pts->setRectFan(r.fLeft + dx, r.fTop + dy,
31 r.fRight - dx, r.fBottom - dy, stride); 31 r.fRight - dx, r.fBottom - dy, stride);
32 } 32 }
33
34 static const GrGeometryProcessor* create_fill_rect_gp(bool tweakAlphaForCoverage ,
35 const SkMatrix& localMatri x,
36 bool usesLocalCoords,
37 bool coverageIgnored) {
38 uint32_t flags = GrDefaultGeoProcFactory::kColor_GPType;
39 const GrGeometryProcessor* gp;
40 if (tweakAlphaForCoverage) {
41 gp = GrDefaultGeoProcFactory::Create(flags, GrColor_WHITE, usesLocalCoor ds, coverageIgnored,
42 SkMatrix::I(), localMatrix);
43 } else {
44 flags |= GrDefaultGeoProcFactory::kCoverage_GPType;
45 gp = GrDefaultGeoProcFactory::Create(flags, GrColor_WHITE, usesLocalCoor ds, coverageIgnored,
46 SkMatrix::I(), localMatrix);
47 }
48 return gp;
49 }
50
51 GR_DECLARE_STATIC_UNIQUE_KEY(gAAFillRectIndexBufferKey); 33 GR_DECLARE_STATIC_UNIQUE_KEY(gAAFillRectIndexBufferKey);
52 34
53 class AAFillRectBatch : public GrBatch { 35 class AAFillRectBatch : public GrBatch {
54 public: 36 public:
55 struct Geometry { 37 struct Geometry {
56 GrColor fColor; 38 GrColor fColor;
57 SkMatrix fViewMatrix; 39 SkMatrix fViewMatrix;
58 SkRect fRect; 40 SkRect fRect;
59 SkRect fDevRect; 41 SkRect fDevRect;
60 }; 42 };
(...skipping 24 matching lines...) Expand all
85 fBatch.fColorIgnored = !init.readsColor(); 67 fBatch.fColorIgnored = !init.readsColor();
86 fBatch.fColor = fGeoData[0].fColor; 68 fBatch.fColor = fGeoData[0].fColor;
87 fBatch.fUsesLocalCoords = init.readsLocalCoords(); 69 fBatch.fUsesLocalCoords = init.readsLocalCoords();
88 fBatch.fCoverageIgnored = !init.readsCoverage(); 70 fBatch.fCoverageIgnored = !init.readsCoverage();
89 fBatch.fCanTweakAlphaForCoverage = init.canTweakAlphaForCoverage(); 71 fBatch.fCanTweakAlphaForCoverage = init.canTweakAlphaForCoverage();
90 } 72 }
91 73
92 void generateGeometry(GrBatchTarget* batchTarget, const GrPipeline* pipeline ) override { 74 void generateGeometry(GrBatchTarget* batchTarget, const GrPipeline* pipeline ) override {
93 bool canTweakAlphaForCoverage = this->canTweakAlphaForCoverage(); 75 bool canTweakAlphaForCoverage = this->canTweakAlphaForCoverage();
94 76
95 SkMatrix localMatrix; 77 SkAutoTUnref<const GrGeometryProcessor> gp(
96 if (this->usesLocalCoords() && !this->viewMatrix().invert(&localMatrix)) { 78 GrDefaultGeoProcFactory::CreateForDeviceSpaceAlphaTweakIfPossibl e(
97 SkDebugf("Cannot invert\n"); 79 this->viewMatrix(), this->usesLocalCoords(), this->cover ageIgnored(),
80 canTweakAlphaForCoverage));
81 if (!gp) {
82 SkDebugf("Couldn't create GrGeometryProcessor\n");
98 return; 83 return;
99 } 84 }
100 85
101 SkAutoTUnref<const GrGeometryProcessor> gp(create_fill_rect_gp(canTweakA lphaForCoverage,
102 localMatr ix,
103 this->use sLocalCoords(),
104 this->cov erageIgnored()));
105
106 batchTarget->initDraw(gp, pipeline); 86 batchTarget->initDraw(gp, pipeline);
107 87
108 size_t vertexStride = gp->getVertexStride(); 88 size_t vertexStride = gp->getVertexStride();
109 SkASSERT(canTweakAlphaForCoverage ? 89 SkASSERT(canTweakAlphaForCoverage ?
110 vertexStride == sizeof(GrDefaultGeoProcFactory::PositionColorAt tr) : 90 vertexStride == sizeof(GrDefaultGeoProcFactory::PositionColorAt tr) :
111 vertexStride == sizeof(GrDefaultGeoProcFactory::PositionColorCo verageAttr)); 91 vertexStride == sizeof(GrDefaultGeoProcFactory::PositionColorCo verageAttr));
112 int instanceCount = fGeoData.count(); 92 int instanceCount = fGeoData.count();
113 93
114 SkAutoTUnref<const GrIndexBuffer> indexBuffer(this->getIndexBuffer( 94 SkAutoTUnref<const GrIndexBuffer> indexBuffer(this->getIndexBuffer(
115 batchTarget->resourceProvider())); 95 batchTarget->resourceProvider()));
(...skipping 320 matching lines...) Expand 10 before | Expand all | Expand 10 after
436 fBatch.fColorIgnored = !init.readsColor(); 416 fBatch.fColorIgnored = !init.readsColor();
437 fBatch.fColor = fGeoData[0].fColor; 417 fBatch.fColor = fGeoData[0].fColor;
438 fBatch.fUsesLocalCoords = init.readsLocalCoords(); 418 fBatch.fUsesLocalCoords = init.readsLocalCoords();
439 fBatch.fCoverageIgnored = !init.readsCoverage(); 419 fBatch.fCoverageIgnored = !init.readsCoverage();
440 fBatch.fMiterStroke = fGeoData[0].fMiterStroke; 420 fBatch.fMiterStroke = fGeoData[0].fMiterStroke;
441 fBatch.fCanTweakAlphaForCoverage = init.canTweakAlphaForCoverage(); 421 fBatch.fCanTweakAlphaForCoverage = init.canTweakAlphaForCoverage();
442 } 422 }
443 423
444 void generateGeometry(GrBatchTarget* batchTarget, const GrPipeline* pipeline ) override { 424 void generateGeometry(GrBatchTarget* batchTarget, const GrPipeline* pipeline ) override {
445 bool canTweakAlphaForCoverage = this->canTweakAlphaForCoverage(); 425 bool canTweakAlphaForCoverage = this->canTweakAlphaForCoverage();
446 426 SkAutoTUnref<const GrGeometryProcessor> gp(
447 // Local matrix is ignored if we don't have local coords. If we have lo calcoords we only 427 GrDefaultGeoProcFactory::CreateForDeviceSpaceAlphaTweakIfPossibl e(
448 // batch with identical view matrices 428 this->viewMatrix(), this->usesLocalCoords(), this->cover ageIgnored(),
449 SkMatrix localMatrix; 429 canTweakAlphaForCoverage));
450 if (this->usesLocalCoords() && !this->viewMatrix().invert(&localMatrix)) { 430 if (!gp) {
451 SkDebugf("Cannot invert\n"); 431 SkDebugf("Couldn't create GrGeometryProcessor\n");
452 return; 432 return;
453 } 433 }
454 434
455 SkAutoTUnref<const GrGeometryProcessor> gp(create_fill_rect_gp(canTweakA lphaForCoverage,
456 localMatr ix,
457 this->use sLocalCoords(),
458 this->cov erageIgnored()));
459
460 batchTarget->initDraw(gp, pipeline); 435 batchTarget->initDraw(gp, pipeline);
461 436
462 size_t vertexStride = gp->getVertexStride(); 437 size_t vertexStride = gp->getVertexStride();
463 438
464 SkASSERT(canTweakAlphaForCoverage ? 439 SkASSERT(canTweakAlphaForCoverage ?
465 vertexStride == sizeof(GrDefaultGeoProcFactory::PositionColorAt tr) : 440 vertexStride == sizeof(GrDefaultGeoProcFactory::PositionColorAt tr) :
466 vertexStride == sizeof(GrDefaultGeoProcFactory::PositionColorCo verageAttr)); 441 vertexStride == sizeof(GrDefaultGeoProcFactory::PositionColorCo verageAttr));
467 int innerVertexNum = 4; 442 int innerVertexNum = 4;
468 int outerVertexNum = this->miterStroke() ? 4 : 8; 443 int outerVertexNum = this->miterStroke() ? 4 : 8;
469 int verticesPerInstance = (outerVertexNum + innerVertexNum) * 2; 444 int verticesPerInstance = (outerVertexNum + innerVertexNum) * 2;
(...skipping 379 matching lines...) Expand 10 before | Expand all | Expand 10 after
849 geo.fColor = GrRandomColor(random); 824 geo.fColor = GrRandomColor(random);
850 geo.fDevOutside = outside; 825 geo.fDevOutside = outside;
851 geo.fDevOutsideAssist = outsideAssist; 826 geo.fDevOutsideAssist = outsideAssist;
852 geo.fDevInside = inside; 827 geo.fDevInside = inside;
853 geo.fMiterStroke = miterStroke; 828 geo.fMiterStroke = miterStroke;
854 829
855 return AAStrokeRectBatch::Create(geo, GrTest::TestMatrix(random)); 830 return AAStrokeRectBatch::Create(geo, GrTest::TestMatrix(random));
856 } 831 }
857 832
858 #endif 833 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698