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