| 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 "GrAAStrokeRectBatch.h" | 8 #include "GrAAStrokeRectBatch.h" |
| 9 | 9 |
| 10 #include "GrDefaultGeoProcFactory.h" | 10 #include "GrDefaultGeoProcFactory.h" |
| (...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 197 GR_STATIC_ASSERT(SK_ARRAY_COUNT(gBevelIndices) == kBevelIndexCnt); | 197 GR_STATIC_ASSERT(SK_ARRAY_COUNT(gBevelIndices) == kBevelIndexCnt); |
| 198 | 198 |
| 199 GR_DEFINE_STATIC_UNIQUE_KEY(gBevelIndexBufferKey); | 199 GR_DEFINE_STATIC_UNIQUE_KEY(gBevelIndexBufferKey); |
| 200 return resourceProvider->findOrCreateInstancedIndexBuffer(gBevelIndices, | 200 return resourceProvider->findOrCreateInstancedIndexBuffer(gBevelIndices, |
| 201 kBevelIndexCnt, kNumBevelRectsInIndexBuffer, kBevelVertexCnt, | 201 kBevelIndexCnt, kNumBevelRectsInIndexBuffer, kBevelVertexCnt, |
| 202 gBevelIndexBufferKey); | 202 gBevelIndexBufferKey); |
| 203 } | 203 } |
| 204 } | 204 } |
| 205 | 205 |
| 206 bool GrAAStrokeRectBatch::onCombineIfPossible(GrBatch* t, const GrCaps& caps) { | 206 bool GrAAStrokeRectBatch::onCombineIfPossible(GrBatch* t, const GrCaps& caps) { |
| 207 if (!GrPipeline::CanCombine(*this->pipeline(), this->bounds(), *t->pipeline(
), t->bounds(), | 207 GrAAStrokeRectBatch* that = t->cast<GrAAStrokeRectBatch>(); |
| 208 caps)) { | 208 |
| 209 if (!GrPipeline::CanCombine(*this->pipeline(), this->bounds(), *that->pipeli
ne(), |
| 210 that->bounds(), caps)) { |
| 209 return false; | 211 return false; |
| 210 } | 212 } |
| 211 | 213 |
| 212 GrAAStrokeRectBatch* that = t->cast<GrAAStrokeRectBatch>(); | |
| 213 | |
| 214 // TODO batch across miterstroke changes | 214 // TODO batch across miterstroke changes |
| 215 if (this->miterStroke() != that->miterStroke()) { | 215 if (this->miterStroke() != that->miterStroke()) { |
| 216 return false; | 216 return false; |
| 217 } | 217 } |
| 218 | 218 |
| 219 // We apply the viewmatrix to the rect points on the cpu. However, if the p
ipeline uses | 219 // We apply the viewmatrix to the rect points on the cpu. However, if the p
ipeline uses |
| 220 // local coords then we won't be able to batch. We could actually upload th
e viewmatrix | 220 // local coords then we won't be able to batch. We could actually upload th
e viewmatrix |
| 221 // using vertex attributes in these cases, but haven't investigated that | 221 // using vertex attributes in these cases, but haven't investigated that |
| 222 if (this->usesLocalCoords() && !this->viewMatrix().cheapEqualTo(that->viewMa
trix())) { | 222 if (this->usesLocalCoords() && !this->viewMatrix().cheapEqualTo(that->viewMa
trix())) { |
| 223 return false; | 223 return false; |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 349 } | 349 } |
| 350 } | 350 } |
| 351 } | 351 } |
| 352 | 352 |
| 353 ////////////////////////////////////////////////////////////////////////////////
/////////////////// | 353 ////////////////////////////////////////////////////////////////////////////////
/////////////////// |
| 354 | 354 |
| 355 #ifdef GR_TEST_UTILS | 355 #ifdef GR_TEST_UTILS |
| 356 | 356 |
| 357 #include "GrBatchTest.h" | 357 #include "GrBatchTest.h" |
| 358 | 358 |
| 359 BATCH_TEST_DEFINE(AAStrokeRectBatch) { | 359 DRAW_BATCH_TEST_DEFINE(AAStrokeRectBatch) { |
| 360 bool miterStroke = random->nextBool(); | 360 bool miterStroke = random->nextBool(); |
| 361 | 361 |
| 362 // Create mock stroke rect | 362 // Create mock stroke rect |
| 363 SkRect outside = GrTest::TestRect(random); | 363 SkRect outside = GrTest::TestRect(random); |
| 364 SkScalar minDim = SkMinScalar(outside.width(), outside.height()); | 364 SkScalar minDim = SkMinScalar(outside.width(), outside.height()); |
| 365 SkScalar strokeWidth = minDim * 0.1f; | 365 SkScalar strokeWidth = minDim * 0.1f; |
| 366 SkRect outsideAssist = outside; | 366 SkRect outsideAssist = outside; |
| 367 outsideAssist.outset(strokeWidth, strokeWidth); | 367 outsideAssist.outset(strokeWidth, strokeWidth); |
| 368 SkRect inside = outside; | 368 SkRect inside = outside; |
| 369 inside.inset(strokeWidth, strokeWidth); | 369 inside.inset(strokeWidth, strokeWidth); |
| 370 | 370 |
| 371 GrAAStrokeRectBatch::Geometry geo; | 371 GrAAStrokeRectBatch::Geometry geo; |
| 372 geo.fColor = GrRandomColor(random); | 372 geo.fColor = GrRandomColor(random); |
| 373 geo.fDevOutside = outside; | 373 geo.fDevOutside = outside; |
| 374 geo.fDevOutsideAssist = outsideAssist; | 374 geo.fDevOutsideAssist = outsideAssist; |
| 375 geo.fDevInside = inside; | 375 geo.fDevInside = inside; |
| 376 geo.fMiterStroke = miterStroke; | 376 geo.fMiterStroke = miterStroke; |
| 377 | 377 |
| 378 return GrAAStrokeRectBatch::Create(geo, GrTest::TestMatrix(random)); | 378 return GrAAStrokeRectBatch::Create(geo, GrTest::TestMatrix(random)); |
| 379 } | 379 } |
| 380 | 380 |
| 381 #endif | 381 #endif |
| OLD | NEW |