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 808 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
819 add_quads(&quads[3*i], qSubdivs[i], toDevice, toSrc, &verts, devBounds); | 819 add_quads(&quads[3*i], qSubdivs[i], toDevice, toSrc, &verts, devBounds); |
820 } | 820 } |
821 | 821 |
822 // Start Conics | 822 // Start Conics |
823 for (int i = 0; i < conicCnt; ++i) { | 823 for (int i = 0; i < conicCnt; ++i) { |
824 add_conics(&conics[3*i], cWeights[i], toDevice, toSrc, &verts, devBounds
); | 824 add_conics(&conics[3*i], cWeights[i], toDevice, toSrc, &verts, devBounds
); |
825 } | 825 } |
826 return true; | 826 return true; |
827 } | 827 } |
828 | 828 |
829 bool GrAAHairLinePathRenderer::canDrawPath(const SkStrokeRec& stroke, | 829 bool GrAAHairLinePathRenderer::canDrawPath(const SkPath& path, |
| 830 const SkStrokeRec& stroke, |
830 const GrDrawTarget* target, | 831 const GrDrawTarget* target, |
831 bool antiAlias) const { | 832 bool antiAlias) const { |
832 if (!antiAlias) { | 833 if (!antiAlias) { |
833 return false; | 834 return false; |
834 } | 835 } |
835 | 836 |
836 if (!IsStrokeHairlineOrEquivalent(stroke, | 837 if (!IsStrokeHairlineOrEquivalent(stroke, |
837 target->getDrawState().getViewMatrix(), | 838 target->getDrawState().getViewMatrix(), |
838 NULL)) { | 839 NULL)) { |
839 return false; | 840 return false; |
840 } | 841 } |
841 | 842 |
842 if (SkPath::kLine_SegmentMask == this->path().getSegmentMasks() || | 843 if (SkPath::kLine_SegmentMask == path.getSegmentMasks() || |
843 target->caps()->shaderDerivativeSupport()) { | 844 target->caps()->shaderDerivativeSupport()) { |
844 return true; | 845 return true; |
845 } | 846 } |
846 return false; | 847 return false; |
847 } | 848 } |
848 | 849 |
849 template <class VertexType> | 850 template <class VertexType> |
850 bool check_bounds(GrDrawState* drawState, const SkRect& devBounds, void* vertice
s, int vCount) | 851 bool check_bounds(GrDrawState* drawState, const SkRect& devBounds, void* vertice
s, int vCount) |
851 { | 852 { |
852 SkRect tolDevBounds = devBounds; | 853 SkRect tolDevBounds = devBounds; |
(...skipping 23 matching lines...) Expand all Loading... |
876 actualBounds.growToInclude(pos.fX, pos.fY); | 877 actualBounds.growToInclude(pos.fX, pos.fY); |
877 } | 878 } |
878 } | 879 } |
879 if (!first) { | 880 if (!first) { |
880 return tolDevBounds.contains(actualBounds); | 881 return tolDevBounds.contains(actualBounds); |
881 } | 882 } |
882 | 883 |
883 return true; | 884 return true; |
884 } | 885 } |
885 | 886 |
886 bool GrAAHairLinePathRenderer::onDrawPath(const SkStrokeRec& stroke, | 887 bool GrAAHairLinePathRenderer::onDrawPath(const SkPath& path, |
| 888 const SkStrokeRec& stroke, |
887 GrDrawTarget* target, | 889 GrDrawTarget* target, |
888 bool antiAlias) { | 890 bool antiAlias) { |
889 GrDrawState* drawState = target->drawState(); | 891 GrDrawState* drawState = target->drawState(); |
890 | 892 |
891 SkScalar hairlineCoverage; | 893 SkScalar hairlineCoverage; |
892 if (IsStrokeHairlineOrEquivalent(stroke, | 894 if (IsStrokeHairlineOrEquivalent(stroke, |
893 target->getDrawState().getViewMatrix(), | 895 target->getDrawState().getViewMatrix(), |
894 &hairlineCoverage)) { | 896 &hairlineCoverage)) { |
895 uint8_t newCoverage = SkScalarRoundToInt(hairlineCoverage * | 897 uint8_t newCoverage = SkScalarRoundToInt(hairlineCoverage * |
896 target->getDrawState().getCover
age()); | 898 target->getDrawState().getCover
age()); |
897 target->drawState()->setCoverage(newCoverage); | 899 target->drawState()->setCoverage(newCoverage); |
898 } | 900 } |
899 | 901 |
900 SkIRect devClipBounds; | 902 SkIRect devClipBounds; |
901 target->getClip()->getConservativeBounds(drawState->getRenderTarget(), &devC
lipBounds); | 903 target->getClip()->getConservativeBounds(drawState->getRenderTarget(), &devC
lipBounds); |
902 | 904 |
903 int lineCnt; | 905 int lineCnt; |
904 int quadCnt; | 906 int quadCnt; |
905 int conicCnt; | 907 int conicCnt; |
906 PREALLOC_PTARRAY(128) lines; | 908 PREALLOC_PTARRAY(128) lines; |
907 PREALLOC_PTARRAY(128) quads; | 909 PREALLOC_PTARRAY(128) quads; |
908 PREALLOC_PTARRAY(128) conics; | 910 PREALLOC_PTARRAY(128) conics; |
909 IntArray qSubdivs; | 911 IntArray qSubdivs; |
910 FloatArray cWeights; | 912 FloatArray cWeights; |
911 quadCnt = generate_lines_and_quads(this->path(), drawState->getViewMatrix(),
devClipBounds, | 913 quadCnt = generate_lines_and_quads(path, drawState->getViewMatrix(), devClip
Bounds, |
912 &lines, &quads, &conics, &qSubdivs, &cWei
ghts); | 914 &lines, &quads, &conics, &qSubdivs, &cWei
ghts); |
913 lineCnt = lines.count() / 2; | 915 lineCnt = lines.count() / 2; |
914 conicCnt = conics.count() / 3; | 916 conicCnt = conics.count() / 3; |
915 | 917 |
916 // do lines first | 918 // do lines first |
917 if (lineCnt) { | 919 if (lineCnt) { |
918 GrDrawTarget::AutoReleaseGeometry arg; | 920 GrDrawTarget::AutoReleaseGeometry arg; |
919 SkRect devBounds; | 921 SkRect devBounds; |
920 | 922 |
921 if (!this->createLineGeom(this->path(), | 923 if (!this->createLineGeom(path, |
922 target, | 924 target, |
923 lines, | 925 lines, |
924 lineCnt, | 926 lineCnt, |
925 &arg, | 927 &arg, |
926 &devBounds)) { | 928 &devBounds)) { |
927 return false; | 929 return false; |
928 } | 930 } |
929 | 931 |
930 GrDrawTarget::AutoStateRestore asr; | 932 GrDrawTarget::AutoStateRestore asr; |
931 | 933 |
(...skipping 25 matching lines...) Expand all Loading... |
957 lines += n; | 959 lines += n; |
958 } | 960 } |
959 } | 961 } |
960 } | 962 } |
961 | 963 |
962 // then quadratics/conics | 964 // then quadratics/conics |
963 if (quadCnt || conicCnt) { | 965 if (quadCnt || conicCnt) { |
964 GrDrawTarget::AutoReleaseGeometry arg; | 966 GrDrawTarget::AutoReleaseGeometry arg; |
965 SkRect devBounds; | 967 SkRect devBounds; |
966 | 968 |
967 if (!this->createBezierGeom(this->path(), | 969 if (!this->createBezierGeom(path, |
968 target, | 970 target, |
969 quads, | 971 quads, |
970 quadCnt, | 972 quadCnt, |
971 conics, | 973 conics, |
972 conicCnt, | 974 conicCnt, |
973 qSubdivs, | 975 qSubdivs, |
974 cWeights, | 976 cWeights, |
975 &arg, | 977 &arg, |
976 &devBounds)) { | 978 &devBounds)) { |
977 return false; | 979 return false; |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1031 &devBounds); | 1033 &devBounds); |
1032 conics += n; | 1034 conics += n; |
1033 } | 1035 } |
1034 } | 1036 } |
1035 } | 1037 } |
1036 | 1038 |
1037 target->resetIndexSource(); | 1039 target->resetIndexSource(); |
1038 | 1040 |
1039 return true; | 1041 return true; |
1040 } | 1042 } |
OLD | NEW |