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 "GrAAFillRectBatch.h" | 8 #include "GrAAFillRectBatch.h" |
9 | 9 |
10 #include "GrBatch.h" | 10 #include "GrBatch.h" |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
55 * | 55 * |
56 * GrDefaultGeoProcFactory::LocalCoords::Type LocalCoordsType() | 56 * GrDefaultGeoProcFactory::LocalCoords::Type LocalCoordsType() |
57 * | 57 * |
58 * bool StrideCheck(size_t vertexStride, bool canTweakAlphaForCoverage, | 58 * bool StrideCheck(size_t vertexStride, bool canTweakAlphaForCoverage, |
59 * bool usesLocalCoords) | 59 * bool usesLocalCoords) |
60 * | 60 * |
61 * void FillInAttributes(intptr_t startVertex, size_t vertexStride, | 61 * void FillInAttributes(intptr_t startVertex, size_t vertexStride, |
62 * SkPoint* fan0Position, const Geometry&) | 62 * SkPoint* fan0Position, const Geometry&) |
63 */ | 63 */ |
64 template <typename Base> | 64 template <typename Base> |
65 class AAFillRectBatch : public GrBatch { | 65 class AAFillRectBatch : public GrVertexBatch { |
66 public: | 66 public: |
67 typedef typename Base::Geometry Geometry; | 67 typedef typename Base::Geometry Geometry; |
68 | 68 |
69 static AAFillRectBatch* Create() { | 69 static AAFillRectBatch* Create() { |
70 return SkNEW(AAFillRectBatch); | 70 return SkNEW(AAFillRectBatch); |
71 } | 71 } |
72 | 72 |
73 const char* name() const override { return "AAFillRectBatch"; } | 73 const char* name() const override { return "AAFillRectBatch"; } |
74 | 74 |
75 void getInvariantOutputColor(GrInitInvariantOutput* out) const override { | 75 void getInvariantOutputColor(GrInitInvariantOutput* out) const override { |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
158 } | 158 } |
159 | 159 |
160 GrColor color() const { return fBatch.fColor; } | 160 GrColor color() const { return fBatch.fColor; } |
161 bool usesLocalCoords() const { return fBatch.fUsesLocalCoords; } | 161 bool usesLocalCoords() const { return fBatch.fUsesLocalCoords; } |
162 bool canTweakAlphaForCoverage() const { return fBatch.fCanTweakAlphaForCover
age; } | 162 bool canTweakAlphaForCoverage() const { return fBatch.fCanTweakAlphaForCover
age; } |
163 bool colorIgnored() const { return fBatch.fColorIgnored; } | 163 bool colorIgnored() const { return fBatch.fColorIgnored; } |
164 const SkMatrix& viewMatrix() const { return fGeoData[0].fViewMatrix; } | 164 const SkMatrix& viewMatrix() const { return fGeoData[0].fViewMatrix; } |
165 bool coverageIgnored() const { return fBatch.fCoverageIgnored; } | 165 bool coverageIgnored() const { return fBatch.fCoverageIgnored; } |
166 | 166 |
167 bool onCombineIfPossible(GrBatch* t, const GrCaps& caps) override { | 167 bool onCombineIfPossible(GrBatch* t, const GrCaps& caps) override { |
168 if (!GrPipeline::CanCombine(*this->pipeline(), this->bounds(), *t->pipel
ine(), t->bounds(), | 168 AAFillRectBatch* that = t->cast<AAFillRectBatch>(); |
169 caps)) { | 169 if (!GrPipeline::CanCombine(*this->pipeline(), this->bounds(), *that->pi
peline(), |
| 170 that->bounds(), caps)) { |
170 return false; | 171 return false; |
171 } | 172 } |
172 | 173 |
173 AAFillRectBatch* that = t->cast<AAFillRectBatch>(); | |
174 if (!Base::CanCombineLocalCoords(this->viewMatrix(), that->viewMatrix(), | 174 if (!Base::CanCombineLocalCoords(this->viewMatrix(), that->viewMatrix(), |
175 this->usesLocalCoords())) { | 175 this->usesLocalCoords())) { |
176 return false; | 176 return false; |
177 } | 177 } |
178 | 178 |
179 if (this->color() != that->color()) { | 179 if (this->color() != that->color()) { |
180 fBatch.fColor = GrColor_ILLEGAL; | 180 fBatch.fColor = GrColor_ILLEGAL; |
181 } | 181 } |
182 | 182 |
183 // In the event of two batches, one who can tweak, one who cannot, we ju
st fall back to | 183 // In the event of two batches, one who can tweak, one who cannot, we ju
st fall back to |
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
392 SkPoint* fan0Loc = reinterpret_cast<SkPoint*>(vertices + vertexStride -
sizeof(SkPoint)); | 392 SkPoint* fan0Loc = reinterpret_cast<SkPoint*>(vertices + vertexStride -
sizeof(SkPoint)); |
393 localCoordMatrix.mapPointsWithStride(fan0Loc, fan0Pos, vertexStride, 8); | 393 localCoordMatrix.mapPointsWithStride(fan0Loc, fan0Pos, vertexStride, 8); |
394 } | 394 } |
395 }; | 395 }; |
396 | 396 |
397 typedef AAFillRectBatch<AAFillRectBatchNoLocalMatrixImp> AAFillRectBatchNoLocalM
atrix; | 397 typedef AAFillRectBatch<AAFillRectBatchNoLocalMatrixImp> AAFillRectBatchNoLocalM
atrix; |
398 typedef AAFillRectBatch<AAFillRectBatchLocalMatrixImp> AAFillRectBatchLocalMatri
x; | 398 typedef AAFillRectBatch<AAFillRectBatchLocalMatrixImp> AAFillRectBatchLocalMatri
x; |
399 | 399 |
400 namespace GrAAFillRectBatch { | 400 namespace GrAAFillRectBatch { |
401 | 401 |
402 GrBatch* Create(GrColor color, | 402 GrDrawBatch* Create(GrColor color, |
403 const SkMatrix& viewMatrix, | 403 const SkMatrix& viewMatrix, |
404 const SkRect& rect, | 404 const SkRect& rect, |
405 const SkRect& devRect) { | 405 const SkRect& devRect) { |
406 AAFillRectBatchNoLocalMatrix* batch = AAFillRectBatchNoLocalMatrix::Create()
; | 406 AAFillRectBatchNoLocalMatrix* batch = AAFillRectBatchNoLocalMatrix::Create()
; |
407 AAFillRectBatchNoLocalMatrix::Geometry& geo = *batch->geometry(); | 407 AAFillRectBatchNoLocalMatrix::Geometry& geo = *batch->geometry(); |
408 geo.fColor = color; | 408 geo.fColor = color; |
409 geo.fViewMatrix = viewMatrix; | 409 geo.fViewMatrix = viewMatrix; |
410 geo.fDevRect = devRect; | 410 geo.fDevRect = devRect; |
411 batch->init(); | 411 batch->init(); |
412 return batch; | 412 return batch; |
413 } | 413 } |
414 | 414 |
415 GrBatch* Create(GrColor color, | 415 GrDrawBatch* Create(GrColor color, |
416 const SkMatrix& viewMatrix, | 416 const SkMatrix& viewMatrix, |
417 const SkMatrix& localMatrix, | 417 const SkMatrix& localMatrix, |
418 const SkRect& rect, | 418 const SkRect& rect, |
419 const SkRect& devRect) { | 419 const SkRect& devRect) { |
420 AAFillRectBatchLocalMatrix* batch = AAFillRectBatchLocalMatrix::Create(); | 420 AAFillRectBatchLocalMatrix* batch = AAFillRectBatchLocalMatrix::Create(); |
421 AAFillRectBatchLocalMatrix::Geometry& geo = *batch->geometry(); | 421 AAFillRectBatchLocalMatrix::Geometry& geo = *batch->geometry(); |
422 geo.fColor = color; | 422 geo.fColor = color; |
423 geo.fViewMatrix = viewMatrix; | 423 geo.fViewMatrix = viewMatrix; |
424 geo.fLocalMatrix = localMatrix; | 424 geo.fLocalMatrix = localMatrix; |
425 geo.fDevRect = devRect; | 425 geo.fDevRect = devRect; |
426 batch->init(); | 426 batch->init(); |
427 return batch; | 427 return batch; |
428 } | 428 } |
429 | 429 |
430 }; | 430 }; |
431 | 431 |
432 ////////////////////////////////////////////////////////////////////////////////
/////////////////// | 432 ////////////////////////////////////////////////////////////////////////////////
/////////////////// |
433 | 433 |
434 #ifdef GR_TEST_UTILS | 434 #ifdef GR_TEST_UTILS |
435 | 435 |
436 #include "GrBatchTest.h" | 436 #include "GrBatchTest.h" |
437 | 437 |
438 BATCH_TEST_DEFINE(AAFillRectBatch) { | 438 DRAW_BATCH_TEST_DEFINE(AAFillRectBatch) { |
439 AAFillRectBatchNoLocalMatrix* batch = AAFillRectBatchNoLocalMatrix::Create()
; | 439 AAFillRectBatchNoLocalMatrix* batch = AAFillRectBatchNoLocalMatrix::Create()
; |
440 AAFillRectBatchNoLocalMatrix::Geometry& geo = *batch->geometry(); | 440 AAFillRectBatchNoLocalMatrix::Geometry& geo = *batch->geometry(); |
441 geo.fColor = GrRandomColor(random); | 441 geo.fColor = GrRandomColor(random); |
442 geo.fViewMatrix = GrTest::TestMatrix(random); | 442 geo.fViewMatrix = GrTest::TestMatrix(random); |
443 geo.fDevRect = GrTest::TestRect(random); | 443 geo.fDevRect = GrTest::TestRect(random); |
444 batch->init(); | 444 batch->init(); |
445 return batch; | 445 return batch; |
446 } | 446 } |
447 | 447 |
448 BATCH_TEST_DEFINE(AAFillRectBatchLocalMatrix) { | 448 DRAW_BATCH_TEST_DEFINE(AAFillRectBatchLocalMatrix) { |
449 AAFillRectBatchLocalMatrix* batch = AAFillRectBatchLocalMatrix::Create(); | 449 AAFillRectBatchLocalMatrix* batch = AAFillRectBatchLocalMatrix::Create(); |
450 AAFillRectBatchLocalMatrix::Geometry& geo = *batch->geometry(); | 450 AAFillRectBatchLocalMatrix::Geometry& geo = *batch->geometry(); |
451 geo.fColor = GrRandomColor(random); | 451 geo.fColor = GrRandomColor(random); |
452 geo.fViewMatrix = GrTest::TestMatrix(random); | 452 geo.fViewMatrix = GrTest::TestMatrix(random); |
453 geo.fLocalMatrix = GrTest::TestMatrix(random); | 453 geo.fLocalMatrix = GrTest::TestMatrix(random); |
454 geo.fDevRect = GrTest::TestRect(random); | 454 geo.fDevRect = GrTest::TestRect(random); |
455 batch->init(); | 455 batch->init(); |
456 return batch; | 456 return batch; |
457 } | 457 } |
458 | 458 |
459 #endif | 459 #endif |
OLD | NEW |