OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2015 Google Inc. | 2 * Copyright 2015 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 "GrBWFillRectBatch.h" | 8 #include "GrBWFillRectBatch.h" |
9 | 9 |
10 #include "GrBatchTarget.h" | 10 #include "GrBatchFlushState.h" |
11 #include "GrColor.h" | 11 #include "GrColor.h" |
12 #include "GrDefaultGeoProcFactory.h" | 12 #include "GrDefaultGeoProcFactory.h" |
13 #include "GrPrimitiveProcessor.h" | 13 #include "GrPrimitiveProcessor.h" |
14 #include "GrVertexBatch.h" | 14 #include "GrVertexBatch.h" |
15 | 15 |
16 class GrBatchTarget; | 16 class GrBatchFlushState; |
17 class SkMatrix; | 17 class SkMatrix; |
18 struct SkRect; | 18 struct SkRect; |
19 | 19 |
20 class BWFillRectBatch : public GrVertexBatch { | 20 class BWFillRectBatch : public GrVertexBatch { |
21 public: | 21 public: |
22 struct Geometry { | 22 struct Geometry { |
23 SkMatrix fViewMatrix; | 23 SkMatrix fViewMatrix; |
24 SkRect fRect; | 24 SkRect fRect; |
25 SkRect fLocalRect; | 25 SkRect fLocalRect; |
26 SkMatrix fLocalMatrix; | 26 SkMatrix fLocalMatrix; |
(...skipping 24 matching lines...) Expand all Loading... |
51 } | 51 } |
52 init.getOverrideColorIfSet(&fGeoData[0].fColor); | 52 init.getOverrideColorIfSet(&fGeoData[0].fColor); |
53 | 53 |
54 // setup batch properties | 54 // setup batch properties |
55 fBatch.fColorIgnored = !init.readsColor(); | 55 fBatch.fColorIgnored = !init.readsColor(); |
56 fBatch.fColor = fGeoData[0].fColor; | 56 fBatch.fColor = fGeoData[0].fColor; |
57 fBatch.fUsesLocalCoords = init.readsLocalCoords(); | 57 fBatch.fUsesLocalCoords = init.readsLocalCoords(); |
58 fBatch.fCoverageIgnored = !init.readsCoverage(); | 58 fBatch.fCoverageIgnored = !init.readsCoverage(); |
59 } | 59 } |
60 | 60 |
61 void generateGeometry(GrBatchTarget* batchTarget) override { | 61 void onPrepareDraws(Target* target) override { |
62 SkAutoTUnref<const GrGeometryProcessor> gp(this->createRectGP()); | 62 SkAutoTUnref<const GrGeometryProcessor> gp(this->createRectGP()); |
63 if (!gp) { | 63 if (!gp) { |
64 SkDebugf("Could not create GrGeometryProcessor\n"); | 64 SkDebugf("Could not create GrGeometryProcessor\n"); |
65 return; | 65 return; |
66 } | 66 } |
67 | 67 |
68 batchTarget->initDraw(gp, this->pipeline()); | 68 target->initDraw(gp, this->pipeline()); |
69 | 69 |
70 int instanceCount = fGeoData.count(); | 70 int instanceCount = fGeoData.count(); |
71 size_t vertexStride = gp->getVertexStride(); | 71 size_t vertexStride = gp->getVertexStride(); |
72 SkASSERT(this->hasLocalRect() ? | 72 SkASSERT(this->hasLocalRect() ? |
73 vertexStride == sizeof(GrDefaultGeoProcFactory::PositionColorLo
calCoordAttr) : | 73 vertexStride == sizeof(GrDefaultGeoProcFactory::PositionColorLo
calCoordAttr) : |
74 vertexStride == sizeof(GrDefaultGeoProcFactory::PositionColorAt
tr)); | 74 vertexStride == sizeof(GrDefaultGeoProcFactory::PositionColorAt
tr)); |
75 QuadHelper helper; | 75 QuadHelper helper; |
76 void* vertices = helper.init(batchTarget, vertexStride, instanceCount); | 76 void* vertices = helper.init(target, vertexStride, instanceCount); |
77 | 77 |
78 if (!vertices) { | 78 if (!vertices) { |
79 return; | 79 return; |
80 } | 80 } |
81 | 81 |
82 for (int i = 0; i < instanceCount; i++) { | 82 for (int i = 0; i < instanceCount; i++) { |
83 const Geometry& geom = fGeoData[i]; | 83 const Geometry& geom = fGeoData[i]; |
84 | 84 |
85 intptr_t offset = reinterpret_cast<intptr_t>(vertices) + | 85 intptr_t offset = reinterpret_cast<intptr_t>(vertices) + |
86 kVerticesPerQuad * i * vertexStride; | 86 kVerticesPerQuad * i * vertexStride; |
(...skipping 16 matching lines...) Expand all Loading... |
103 } | 103 } |
104 | 104 |
105 static const int kColorOffset = sizeof(SkPoint); | 105 static const int kColorOffset = sizeof(SkPoint); |
106 GrColor* vertColor = reinterpret_cast<GrColor*>(offset + kColorOffse
t); | 106 GrColor* vertColor = reinterpret_cast<GrColor*>(offset + kColorOffse
t); |
107 for (int j = 0; j < 4; ++j) { | 107 for (int j = 0; j < 4; ++j) { |
108 *vertColor = geom.fColor; | 108 *vertColor = geom.fColor; |
109 vertColor = (GrColor*) ((intptr_t) vertColor + vertexStride); | 109 vertColor = (GrColor*) ((intptr_t) vertColor + vertexStride); |
110 } | 110 } |
111 } | 111 } |
112 | 112 |
113 helper.issueDraw(batchTarget); | 113 helper.recordDraw(target); |
114 } | 114 } |
115 | 115 |
116 SkSTArray<1, Geometry, true>* geoData() { return &fGeoData; } | 116 SkSTArray<1, Geometry, true>* geoData() { return &fGeoData; } |
117 | 117 |
118 private: | 118 private: |
119 BWFillRectBatch(const Geometry& geometry) { | 119 BWFillRectBatch(const Geometry& geometry) { |
120 this->initClassID<BWFillRectBatch>(); | 120 this->initClassID<BWFillRectBatch>(); |
121 fGeoData.push_back(geometry); | 121 fGeoData.push_back(geometry); |
122 | 122 |
123 fBounds = geometry.fRect; | 123 fBounds = geometry.fRect; |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
259 | 259 |
260 geometry.fHasLocalMatrix = random->nextBool(); | 260 geometry.fHasLocalMatrix = random->nextBool(); |
261 if (geometry.fHasLocalMatrix) { | 261 if (geometry.fHasLocalMatrix) { |
262 geometry.fLocalMatrix = GrTest::TestMatrix(random); | 262 geometry.fLocalMatrix = GrTest::TestMatrix(random); |
263 } | 263 } |
264 | 264 |
265 return BWFillRectBatch::Create(geometry); | 265 return BWFillRectBatch::Create(geometry); |
266 } | 266 } |
267 | 267 |
268 #endif | 268 #endif |
OLD | NEW |