| OLD | NEW |
| 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 "GrGpu.h" | 9 #include "GrGpu.h" |
| 10 #include "gl/builders/GrGLProgramBuilder.h" | 10 #include "gl/builders/GrGLProgramBuilder.h" |
| (...skipping 415 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 426 | 426 |
| 427 GrColor color = drawState->getColor(); | 427 GrColor color = drawState->getColor(); |
| 428 | 428 |
| 429 CoverageAttribType covAttribType = set_rect_attribs(drawState); | 429 CoverageAttribType covAttribType = set_rect_attribs(drawState); |
| 430 if (kUseCoverage_CoverageAttribType == covAttribType && GrColorIsOpaque(colo
r)) { | 430 if (kUseCoverage_CoverageAttribType == covAttribType && GrColorIsOpaque(colo
r)) { |
| 431 drawState->setHint(GrDrawState::kVertexColorsAreOpaque_Hint, true); | 431 drawState->setHint(GrDrawState::kVertexColorsAreOpaque_Hint, true); |
| 432 } | 432 } |
| 433 | 433 |
| 434 GrDrawTarget::AutoReleaseGeometry geo(target, 8, 0); | 434 GrDrawTarget::AutoReleaseGeometry geo(target, 8, 0); |
| 435 if (!geo.succeeded()) { | 435 if (!geo.succeeded()) { |
| 436 GrPrintf("Failed to get space for vertices!\n"); | 436 SkDebugf("Failed to get space for vertices!\n"); |
| 437 return; | 437 return; |
| 438 } | 438 } |
| 439 | 439 |
| 440 if (NULL == fAAFillRectIndexBuffer) { | 440 if (NULL == fAAFillRectIndexBuffer) { |
| 441 fAAFillRectIndexBuffer = fGpu->createInstancedIndexBuffer(gFillAARectIdx
, | 441 fAAFillRectIndexBuffer = fGpu->createInstancedIndexBuffer(gFillAARectIdx
, |
| 442 kIndicesPerAAF
illRect, | 442 kIndicesPerAAF
illRect, |
| 443 kNumAAFillRect
sInIndexBuffer, | 443 kNumAAFillRect
sInIndexBuffer, |
| 444 kVertsPerAAFil
lRect); | 444 kVertsPerAAFil
lRect); |
| 445 } | 445 } |
| 446 GrIndexBuffer* indexBuffer = fAAFillRectIndexBuffer; | 446 GrIndexBuffer* indexBuffer = fAAFillRectIndexBuffer; |
| 447 if (NULL == indexBuffer) { | 447 if (NULL == indexBuffer) { |
| 448 GrPrintf("Failed to create index buffer!\n"); | 448 SkDebugf("Failed to create index buffer!\n"); |
| 449 return; | 449 return; |
| 450 } | 450 } |
| 451 | 451 |
| 452 intptr_t verts = reinterpret_cast<intptr_t>(geo.vertices()); | 452 intptr_t verts = reinterpret_cast<intptr_t>(geo.vertices()); |
| 453 size_t vstride = drawState->getVertexStride(); | 453 size_t vstride = drawState->getVertexStride(); |
| 454 | 454 |
| 455 SkPoint* fan0Pos = reinterpret_cast<SkPoint*>(verts); | 455 SkPoint* fan0Pos = reinterpret_cast<SkPoint*>(verts); |
| 456 SkPoint* fan1Pos = reinterpret_cast<SkPoint*>(verts + 4 * vstride); | 456 SkPoint* fan1Pos = reinterpret_cast<SkPoint*>(verts + 4 * vstride); |
| 457 | 457 |
| 458 SkScalar inset = SkMinScalar(devRect.width(), SK_Scalar1); | 458 SkScalar inset = SkMinScalar(devRect.width(), SK_Scalar1); |
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 599 { combinedMatrix[SkMatrix::kMSkewX], combinedMatrix[SkMatrix::kMScaleY] } | 599 { combinedMatrix[SkMatrix::kMSkewX], combinedMatrix[SkMatrix::kMScaleY] } |
| 600 }; | 600 }; |
| 601 | 601 |
| 602 SkScalar newWidth = SkScalarHalf(rect.width() * vec[0].length()) + SK_Scalar
Half; | 602 SkScalar newWidth = SkScalarHalf(rect.width() * vec[0].length()) + SK_Scalar
Half; |
| 603 SkScalar newHeight = SkScalarHalf(rect.height() * vec[1].length()) + SK_Scal
arHalf; | 603 SkScalar newHeight = SkScalarHalf(rect.height() * vec[1].length()) + SK_Scal
arHalf; |
| 604 drawState->setVertexAttribs<gAARectVertexAttribs>(SK_ARRAY_COUNT(gAARectVert
exAttribs), | 604 drawState->setVertexAttribs<gAARectVertexAttribs>(SK_ARRAY_COUNT(gAARectVert
exAttribs), |
| 605 sizeof(RectVertex)); | 605 sizeof(RectVertex)); |
| 606 | 606 |
| 607 GrDrawTarget::AutoReleaseGeometry geo(target, 4, 0); | 607 GrDrawTarget::AutoReleaseGeometry geo(target, 4, 0); |
| 608 if (!geo.succeeded()) { | 608 if (!geo.succeeded()) { |
| 609 GrPrintf("Failed to get space for vertices!\n"); | 609 SkDebugf("Failed to get space for vertices!\n"); |
| 610 return; | 610 return; |
| 611 } | 611 } |
| 612 | 612 |
| 613 RectVertex* verts = reinterpret_cast<RectVertex*>(geo.vertices()); | 613 RectVertex* verts = reinterpret_cast<RectVertex*>(geo.vertices()); |
| 614 | 614 |
| 615 GrGeometryProcessor* gp = GrRectEffect::Create(); | 615 GrGeometryProcessor* gp = GrRectEffect::Create(); |
| 616 drawState->setGeometryProcessor(gp)->unref(); | 616 drawState->setGeometryProcessor(gp)->unref(); |
| 617 | 617 |
| 618 for (int i = 0; i < 4; ++i) { | 618 for (int i = 0; i < 4; ++i) { |
| 619 verts[i].fCenter = center; | 619 verts[i].fCenter = center; |
| (...skipping 26 matching lines...) Expand all Loading... |
| 646 const SkRect& rect, | 646 const SkRect& rect, |
| 647 const SkMatrix& combinedMatrix) { | 647 const SkMatrix& combinedMatrix) { |
| 648 GrDrawState* drawState = target->drawState(); | 648 GrDrawState* drawState = target->drawState(); |
| 649 SkASSERT(combinedMatrix.rectStaysRect()); | 649 SkASSERT(combinedMatrix.rectStaysRect()); |
| 650 | 650 |
| 651 drawState->setVertexAttribs<gAAAARectVertexAttribs>(SK_ARRAY_COUNT(gAAAARect
VertexAttribs), | 651 drawState->setVertexAttribs<gAAAARectVertexAttribs>(SK_ARRAY_COUNT(gAAAARect
VertexAttribs), |
| 652 sizeof(AARectVertex)); | 652 sizeof(AARectVertex)); |
| 653 | 653 |
| 654 GrDrawTarget::AutoReleaseGeometry geo(target, 4, 0); | 654 GrDrawTarget::AutoReleaseGeometry geo(target, 4, 0); |
| 655 if (!geo.succeeded()) { | 655 if (!geo.succeeded()) { |
| 656 GrPrintf("Failed to get space for vertices!\n"); | 656 SkDebugf("Failed to get space for vertices!\n"); |
| 657 return; | 657 return; |
| 658 } | 658 } |
| 659 | 659 |
| 660 AARectVertex* verts = reinterpret_cast<AARectVertex*>(geo.vertices()); | 660 AARectVertex* verts = reinterpret_cast<AARectVertex*>(geo.vertices()); |
| 661 | 661 |
| 662 GrGeometryProcessor* gp = GrAlignedRectEffect::Create(); | 662 GrGeometryProcessor* gp = GrAlignedRectEffect::Create(); |
| 663 drawState->setGeometryProcessor(gp)->unref(); | 663 drawState->setGeometryProcessor(gp)->unref(); |
| 664 | 664 |
| 665 SkRect devRect; | 665 SkRect devRect; |
| 666 combinedMatrix.mapRect(&devRect, rect); | 666 combinedMatrix.mapRect(&devRect, rect); |
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 778 if (kUseCoverage_CoverageAttribType == covAttribType && GrColorIsOpaque(colo
r)) { | 778 if (kUseCoverage_CoverageAttribType == covAttribType && GrColorIsOpaque(colo
r)) { |
| 779 drawState->setHint(GrDrawState::kVertexColorsAreOpaque_Hint, true); | 779 drawState->setHint(GrDrawState::kVertexColorsAreOpaque_Hint, true); |
| 780 } | 780 } |
| 781 | 781 |
| 782 int innerVertexNum = 4; | 782 int innerVertexNum = 4; |
| 783 int outerVertexNum = miterStroke ? 4 : 8; | 783 int outerVertexNum = miterStroke ? 4 : 8; |
| 784 int totalVertexNum = (outerVertexNum + innerVertexNum) * 2; | 784 int totalVertexNum = (outerVertexNum + innerVertexNum) * 2; |
| 785 | 785 |
| 786 GrDrawTarget::AutoReleaseGeometry geo(target, totalVertexNum, 0); | 786 GrDrawTarget::AutoReleaseGeometry geo(target, totalVertexNum, 0); |
| 787 if (!geo.succeeded()) { | 787 if (!geo.succeeded()) { |
| 788 GrPrintf("Failed to get space for vertices!\n"); | 788 SkDebugf("Failed to get space for vertices!\n"); |
| 789 return; | 789 return; |
| 790 } | 790 } |
| 791 GrIndexBuffer* indexBuffer = this->aaStrokeRectIndexBuffer(miterStroke); | 791 GrIndexBuffer* indexBuffer = this->aaStrokeRectIndexBuffer(miterStroke); |
| 792 if (NULL == indexBuffer) { | 792 if (NULL == indexBuffer) { |
| 793 GrPrintf("Failed to create index buffer!\n"); | 793 SkDebugf("Failed to create index buffer!\n"); |
| 794 return; | 794 return; |
| 795 } | 795 } |
| 796 | 796 |
| 797 intptr_t verts = reinterpret_cast<intptr_t>(geo.vertices()); | 797 intptr_t verts = reinterpret_cast<intptr_t>(geo.vertices()); |
| 798 size_t vstride = drawState->getVertexStride(); | 798 size_t vstride = drawState->getVertexStride(); |
| 799 | 799 |
| 800 // We create vertices for four nested rectangles. There are two ramps from 0
to full | 800 // We create vertices for four nested rectangles. There are two ramps from 0
to full |
| 801 // coverage, one on the exterior of the stroke and the other on the interior
. | 801 // coverage, one on the exterior of the stroke and the other on the interior
. |
| 802 // The following pointers refer to the four rects, from outermost to innermo
st. | 802 // The following pointers refer to the four rects, from outermost to innermo
st. |
| 803 SkPoint* fan0Pos = reinterpret_cast<SkPoint*>(verts); | 803 SkPoint* fan0Pos = reinterpret_cast<SkPoint*>(verts); |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 910 // can't call mapRect for devInside since it calls sort | 910 // can't call mapRect for devInside since it calls sort |
| 911 combinedMatrix.mapPoints((SkPoint*)&devInside, (const SkPoint*)&rects[1], 2)
; | 911 combinedMatrix.mapPoints((SkPoint*)&devInside, (const SkPoint*)&rects[1], 2)
; |
| 912 | 912 |
| 913 if (devInside.isEmpty()) { | 913 if (devInside.isEmpty()) { |
| 914 this->fillAARect(target, devOutside, SkMatrix::I(), devOutside); | 914 this->fillAARect(target, devOutside, SkMatrix::I(), devOutside); |
| 915 return; | 915 return; |
| 916 } | 916 } |
| 917 | 917 |
| 918 this->geometryStrokeAARect(target, devOutside, devOutsideAssist, devInside,
true); | 918 this->geometryStrokeAARect(target, devOutside, devOutsideAssist, devInside,
true); |
| 919 } | 919 } |
| OLD | NEW |