| 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 "GrColor.h" | 10 #include "GrColor.h" |
| (...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 213 { args.fViewMatrix[SkMatrix::kMScaleX], args.fViewMatrix[SkMatrix:
:kMSkewY] }, | 213 { args.fViewMatrix[SkMatrix::kMScaleX], args.fViewMatrix[SkMatrix:
:kMSkewY] }, |
| 214 { args.fViewMatrix[SkMatrix::kMSkewX], args.fViewMatrix[SkMatrix:
:kMScaleY] } | 214 { args.fViewMatrix[SkMatrix::kMSkewX], args.fViewMatrix[SkMatrix:
:kMScaleY] } |
| 215 }; | 215 }; |
| 216 | 216 |
| 217 vec[0].normalize(); | 217 vec[0].normalize(); |
| 218 vec[0].scale(SK_ScalarHalf); | 218 vec[0].scale(SK_ScalarHalf); |
| 219 vec[1].normalize(); | 219 vec[1].normalize(); |
| 220 vec[1].scale(SK_ScalarHalf); | 220 vec[1].scale(SK_ScalarHalf); |
| 221 | 221 |
| 222 // create the rotated rect | 222 // create the rotated rect |
| 223 fan0Pos->setRectFan(args.fDevRect.fLeft, args.fDevRect.fTop, | 223 fan0Pos->setRectFan(args.fRect.fLeft, args.fRect.fTop, |
| 224 args.fDevRect.fRight, args.fDevRect.fBottom, ver
texStride); | 224 args.fRect.fRight, args.fRect.fBottom, vertexStr
ide); |
| 225 args.fViewMatrix.mapPointsWithStride(fan0Pos, vertexStride, 4); |
| 225 | 226 |
| 226 // Now create the inset points and then outset the original | 227 // Now create the inset points and then outset the original |
| 227 // rotated points | 228 // rotated points |
| 228 | 229 |
| 229 // TL | 230 // TL |
| 230 *((SkPoint*)((intptr_t)fan1Pos + 0 * vertexStride)) = | 231 *((SkPoint*)((intptr_t)fan1Pos + 0 * vertexStride)) = |
| 231 *((SkPoint*)((intptr_t)fan0Pos + 0 * vertexStride)) + vec[0] + v
ec[1]; | 232 *((SkPoint*)((intptr_t)fan0Pos + 0 * vertexStride)) + vec[0] + v
ec[1]; |
| 232 *((SkPoint*)((intptr_t)fan0Pos + 0 * vertexStride)) -= vec[0] + vec[
1]; | 233 *((SkPoint*)((intptr_t)fan0Pos + 0 * vertexStride)) -= vec[0] + vec[
1]; |
| 233 // BL | 234 // BL |
| 234 *((SkPoint*)((intptr_t)fan1Pos + 1 * vertexStride)) = | 235 *((SkPoint*)((intptr_t)fan1Pos + 1 * vertexStride)) = |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 321 }; | 322 }; |
| 322 | 323 |
| 323 BatchTracker fBatch; | 324 BatchTracker fBatch; |
| 324 SkSTArray<1, Geometry, true> fGeoData; | 325 SkSTArray<1, Geometry, true> fGeoData; |
| 325 }; | 326 }; |
| 326 | 327 |
| 327 class AAFillRectBatchNoLocalMatrixImp { | 328 class AAFillRectBatchNoLocalMatrixImp { |
| 328 public: | 329 public: |
| 329 struct Geometry { | 330 struct Geometry { |
| 330 SkMatrix fViewMatrix; | 331 SkMatrix fViewMatrix; |
| 332 SkRect fRect; |
| 331 SkRect fDevRect; | 333 SkRect fDevRect; |
| 332 GrColor fColor; | 334 GrColor fColor; |
| 333 }; | 335 }; |
| 334 | 336 |
| 335 inline static bool CanCombineLocalCoords(const SkMatrix& mine, const SkMatri
x& theirs, | 337 inline static bool CanCombineLocalCoords(const SkMatrix& mine, const SkMatri
x& theirs, |
| 336 bool usesLocalCoords) { | 338 bool usesLocalCoords) { |
| 337 // We apply the viewmatrix to the rect points on the cpu. However, if t
he pipeline uses | 339 // We apply the viewmatrix to the rect points on the cpu. However, if t
he pipeline uses |
| 338 // local coords then we won't be able to batch. We could actually uploa
d the viewmatrix | 340 // local coords then we won't be able to batch. We could actually uploa
d the viewmatrix |
| 339 // using vertex attributes in these cases, but haven't investigated that | 341 // using vertex attributes in these cases, but haven't investigated that |
| 340 return !usesLocalCoords || mine.cheapEqualTo(theirs); | 342 return !usesLocalCoords || mine.cheapEqualTo(theirs); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 352 } | 354 } |
| 353 | 355 |
| 354 inline static void FillInAttributes(intptr_t, size_t, SkPoint*, const Geomet
ry&) {} | 356 inline static void FillInAttributes(intptr_t, size_t, SkPoint*, const Geomet
ry&) {} |
| 355 }; | 357 }; |
| 356 | 358 |
| 357 class AAFillRectBatchLocalMatrixImp { | 359 class AAFillRectBatchLocalMatrixImp { |
| 358 public: | 360 public: |
| 359 struct Geometry { | 361 struct Geometry { |
| 360 SkMatrix fViewMatrix; | 362 SkMatrix fViewMatrix; |
| 361 SkMatrix fLocalMatrix; | 363 SkMatrix fLocalMatrix; |
| 364 SkRect fRect; |
| 362 SkRect fDevRect; | 365 SkRect fDevRect; |
| 363 GrColor fColor; | 366 GrColor fColor; |
| 364 }; | 367 }; |
| 365 | 368 |
| 366 inline static bool CanCombineLocalCoords(const SkMatrix& mine, const SkMatri
x& theirs, | 369 inline static bool CanCombineLocalCoords(const SkMatrix& mine, const SkMatri
x& theirs, |
| 367 bool usesLocalCoords) { | 370 bool usesLocalCoords) { |
| 368 return true; | 371 return true; |
| 369 } | 372 } |
| 370 | 373 |
| 371 inline static GrDefaultGeoProcFactory::LocalCoords::Type LocalCoordsType() { | 374 inline static GrDefaultGeoProcFactory::LocalCoords::Type LocalCoordsType() { |
| (...skipping 28 matching lines...) Expand all Loading... |
| 400 namespace GrAAFillRectBatch { | 403 namespace GrAAFillRectBatch { |
| 401 | 404 |
| 402 GrDrawBatch* Create(GrColor color, | 405 GrDrawBatch* Create(GrColor color, |
| 403 const SkMatrix& viewMatrix, | 406 const SkMatrix& viewMatrix, |
| 404 const SkRect& rect, | 407 const SkRect& rect, |
| 405 const SkRect& devRect) { | 408 const SkRect& devRect) { |
| 406 AAFillRectBatchNoLocalMatrix* batch = AAFillRectBatchNoLocalMatrix::Create()
; | 409 AAFillRectBatchNoLocalMatrix* batch = AAFillRectBatchNoLocalMatrix::Create()
; |
| 407 AAFillRectBatchNoLocalMatrix::Geometry& geo = *batch->geometry(); | 410 AAFillRectBatchNoLocalMatrix::Geometry& geo = *batch->geometry(); |
| 408 geo.fColor = color; | 411 geo.fColor = color; |
| 409 geo.fViewMatrix = viewMatrix; | 412 geo.fViewMatrix = viewMatrix; |
| 413 geo.fRect = rect; |
| 410 geo.fDevRect = devRect; | 414 geo.fDevRect = devRect; |
| 411 batch->init(); | 415 batch->init(); |
| 412 return batch; | 416 return batch; |
| 413 } | 417 } |
| 414 | 418 |
| 415 GrDrawBatch* Create(GrColor color, | 419 GrDrawBatch* Create(GrColor color, |
| 416 const SkMatrix& viewMatrix, | 420 const SkMatrix& viewMatrix, |
| 417 const SkMatrix& localMatrix, | 421 const SkMatrix& localMatrix, |
| 418 const SkRect& rect, | 422 const SkRect& rect, |
| 419 const SkRect& devRect) { | 423 const SkRect& devRect) { |
| 420 AAFillRectBatchLocalMatrix* batch = AAFillRectBatchLocalMatrix::Create(); | 424 AAFillRectBatchLocalMatrix* batch = AAFillRectBatchLocalMatrix::Create(); |
| 421 AAFillRectBatchLocalMatrix::Geometry& geo = *batch->geometry(); | 425 AAFillRectBatchLocalMatrix::Geometry& geo = *batch->geometry(); |
| 422 geo.fColor = color; | 426 geo.fColor = color; |
| 423 geo.fViewMatrix = viewMatrix; | 427 geo.fViewMatrix = viewMatrix; |
| 424 geo.fLocalMatrix = localMatrix; | 428 geo.fLocalMatrix = localMatrix; |
| 429 geo.fRect = rect; |
| 425 geo.fDevRect = devRect; | 430 geo.fDevRect = devRect; |
| 426 batch->init(); | 431 batch->init(); |
| 427 return batch; | 432 return batch; |
| 428 } | 433 } |
| 429 | 434 |
| 430 }; | 435 }; |
| 431 | 436 |
| 432 ////////////////////////////////////////////////////////////////////////////////
/////////////////// | 437 ////////////////////////////////////////////////////////////////////////////////
/////////////////// |
| 433 | 438 |
| 434 #ifdef GR_TEST_UTILS | 439 #ifdef GR_TEST_UTILS |
| (...skipping 15 matching lines...) Expand all Loading... |
| 450 AAFillRectBatchLocalMatrix::Geometry& geo = *batch->geometry(); | 455 AAFillRectBatchLocalMatrix::Geometry& geo = *batch->geometry(); |
| 451 geo.fColor = GrRandomColor(random); | 456 geo.fColor = GrRandomColor(random); |
| 452 geo.fViewMatrix = GrTest::TestMatrix(random); | 457 geo.fViewMatrix = GrTest::TestMatrix(random); |
| 453 geo.fLocalMatrix = GrTest::TestMatrix(random); | 458 geo.fLocalMatrix = GrTest::TestMatrix(random); |
| 454 geo.fDevRect = GrTest::TestRect(random); | 459 geo.fDevRect = GrTest::TestRect(random); |
| 455 batch->init(); | 460 batch->init(); |
| 456 return batch; | 461 return batch; |
| 457 } | 462 } |
| 458 | 463 |
| 459 #endif | 464 #endif |
| OLD | NEW |