| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2011 Google Inc. | 2 * Copyright 2011 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 "GrAAHairLinePathRenderer.h" | 8 #include "GrAAHairLinePathRenderer.h" |
| 9 | 9 |
| 10 #include "GrContext.h" | 10 #include "GrContext.h" |
| (...skipping 720 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 731 bool GrAAHairLinePathRenderer::createLineGeom(const SkPath& path, | 731 bool GrAAHairLinePathRenderer::createLineGeom(const SkPath& path, |
| 732 GrDrawTarget* target, | 732 GrDrawTarget* target, |
| 733 const PtArray& lines, | 733 const PtArray& lines, |
| 734 int lineCnt, | 734 int lineCnt, |
| 735 GrDrawTarget::AutoReleaseGeometry*
arg, | 735 GrDrawTarget::AutoReleaseGeometry*
arg, |
| 736 SkRect* devBounds) { | 736 SkRect* devBounds) { |
| 737 GrDrawState* drawState = target->drawState(); | 737 GrDrawState* drawState = target->drawState(); |
| 738 | 738 |
| 739 const SkMatrix& viewM = drawState->getViewMatrix(); | 739 const SkMatrix& viewM = drawState->getViewMatrix(); |
| 740 | 740 |
| 741 devBounds->outset(SK_Scalar1, SK_Scalar1); | |
| 742 | |
| 743 int vertCnt = kVertsPerLineSeg * lineCnt; | 741 int vertCnt = kVertsPerLineSeg * lineCnt; |
| 744 | 742 |
| 745 drawState->setVertexAttribs<gHairlineLineAttribs>(SK_ARRAY_COUNT(gHairlineLi
neAttribs)); | 743 drawState->setVertexAttribs<gHairlineLineAttribs>(SK_ARRAY_COUNT(gHairlineLi
neAttribs)); |
| 746 SkASSERT(sizeof(LineVertex) == drawState->getVertexSize()); | 744 SkASSERT(sizeof(LineVertex) == drawState->getVertexSize()); |
| 747 | 745 |
| 748 if (!arg->set(target, vertCnt, 0)) { | 746 if (!arg->set(target, vertCnt, 0)) { |
| 749 return false; | 747 return false; |
| 750 } | 748 } |
| 751 | 749 |
| 752 LineVertex* verts = reinterpret_cast<LineVertex*>(arg->vertices()); | 750 LineVertex* verts = reinterpret_cast<LineVertex*>(arg->vertices()); |
| 753 | 751 |
| 754 const SkMatrix* toSrc = NULL; | 752 const SkMatrix* toSrc = NULL; |
| 755 SkMatrix ivm; | 753 SkMatrix ivm; |
| 756 | 754 |
| 757 if (viewM.hasPerspective()) { | 755 if (viewM.hasPerspective()) { |
| 758 if (viewM.invert(&ivm)) { | 756 if (viewM.invert(&ivm)) { |
| 759 toSrc = &ivm; | 757 toSrc = &ivm; |
| 760 } | 758 } |
| 761 } | 759 } |
| 762 devBounds->set(lines.begin(), lines.count()); | 760 devBounds->set(lines.begin(), lines.count()); |
| 763 for (int i = 0; i < lineCnt; ++i) { | 761 for (int i = 0; i < lineCnt; ++i) { |
| 764 add_line(&lines[2*i], toSrc, drawState->getCoverage(), &verts); | 762 add_line(&lines[2*i], toSrc, drawState->getCoverage(), &verts); |
| 765 } | 763 } |
| 766 // All the verts computed by add_line are within unit distance of the end po
ints. Add a little | 764 // All the verts computed by add_line are within sqrt(1^2 + 0.5^2) of the en
d points. |
| 767 // extra to account for vector normalization precision. | 765 static const SkScalar kSqrtOfOneAndAQuarter = SkFloatToScalar(1.118f); |
| 768 static const SkScalar kOutset = SK_Scalar1 + SK_Scalar1 / 20; | 766 // Add a little extra to account for vector normalization precision. |
| 767 static const SkScalar kOutset = kSqrtOfOneAndAQuarter + SK_Scalar1 / 20; |
| 769 devBounds->outset(kOutset, kOutset); | 768 devBounds->outset(kOutset, kOutset); |
| 770 | 769 |
| 771 return true; | 770 return true; |
| 772 } | 771 } |
| 773 | 772 |
| 774 bool GrAAHairLinePathRenderer::createBezierGeom( | 773 bool GrAAHairLinePathRenderer::createBezierGeom( |
| 775 const SkPath& path, | 774 const SkPath& path, |
| 776 GrDrawTarget* target, | 775 GrDrawTarget* target, |
| 777 const PtArray& quads, | 776 const PtArray& quads, |
| 778 int quadCnt, | 777 int quadCnt, |
| (...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 930 // createLineGeom transforms the geometry to device space when the matri
x does not have | 929 // createLineGeom transforms the geometry to device space when the matri
x does not have |
| 931 // perspective. | 930 // perspective. |
| 932 if (target->getDrawState().getViewMatrix().hasPerspective()) { | 931 if (target->getDrawState().getViewMatrix().hasPerspective()) { |
| 933 asr.set(target, GrDrawTarget::kPreserve_ASRInit); | 932 asr.set(target, GrDrawTarget::kPreserve_ASRInit); |
| 934 } else if (!asr.setIdentity(target, GrDrawTarget::kPreserve_ASRInit)) { | 933 } else if (!asr.setIdentity(target, GrDrawTarget::kPreserve_ASRInit)) { |
| 935 return false; | 934 return false; |
| 936 } | 935 } |
| 937 GrDrawState* drawState = target->drawState(); | 936 GrDrawState* drawState = target->drawState(); |
| 938 | 937 |
| 939 // Check devBounds | 938 // Check devBounds |
| 940 // SkASSERT(check_bounds<LineVertex>(drawState, devBounds, arg.vertices()
, | 939 SkASSERT(check_bounds<LineVertex>(drawState, devBounds, arg.vertices(), |
| 941 // kVertsPerLineSeg * lineCnt)); | 940 kVertsPerLineSeg * lineCnt)); |
| 942 | 941 |
| 943 { | 942 { |
| 944 GrDrawState::AutoRestoreEffects are(drawState); | 943 GrDrawState::AutoRestoreEffects are(drawState); |
| 945 target->setIndexSourceToBuffer(fLinesIndexBuffer); | 944 target->setIndexSourceToBuffer(fLinesIndexBuffer); |
| 946 int lines = 0; | 945 int lines = 0; |
| 947 while (lines < lineCnt) { | 946 while (lines < lineCnt) { |
| 948 int n = GrMin(lineCnt - lines, kNumLineSegsInIdxBuffer); | 947 int n = GrMin(lineCnt - lines, kNumLineSegsInIdxBuffer); |
| 949 target->drawIndexed(kTriangles_GrPrimitiveType, | 948 target->drawIndexed(kTriangles_GrPrimitiveType, |
| 950 kVertsPerLineSeg*lines, // startV | 949 kVertsPerLineSeg*lines, // startV |
| 951 0, // startI | 950 0, // startI |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1029 &devBounds); | 1028 &devBounds); |
| 1030 conics += n; | 1029 conics += n; |
| 1031 } | 1030 } |
| 1032 } | 1031 } |
| 1033 } | 1032 } |
| 1034 | 1033 |
| 1035 target->resetIndexSource(); | 1034 target->resetIndexSource(); |
| 1036 | 1035 |
| 1037 return true; | 1036 return true; |
| 1038 } | 1037 } |
| OLD | NEW |