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 |