Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(167)

Side by Side Diff: src/gpu/GrAAHairLinePathRenderer.cpp

Issue 38573007: Do not apply hairline optimization for paths if nv_path_rendering is used (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: address problems Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/core/SkDrawProcs.h ('k') | src/gpu/GrContext.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 741 matching lines...) Expand 10 before | Expand all | Expand 10 after
752 const SkMatrix* toSrc = NULL; 752 const SkMatrix* toSrc = NULL;
753 SkMatrix ivm; 753 SkMatrix ivm;
754 754
755 if (viewM.hasPerspective()) { 755 if (viewM.hasPerspective()) {
756 if (viewM.invert(&ivm)) { 756 if (viewM.invert(&ivm)) {
757 toSrc = &ivm; 757 toSrc = &ivm;
758 } 758 }
759 } 759 }
760 devBounds->set(lines.begin(), lines.count()); 760 devBounds->set(lines.begin(), lines.count());
761 for (int i = 0; i < lineCnt; ++i) { 761 for (int i = 0; i < lineCnt; ++i) {
762 add_line(&lines[2*i], toSrc, drawState->getCoverage(), &verts); 762 add_line(&lines[2*i], toSrc, drawState->getCoverageColor(), &verts);
763 } 763 }
764 // All the verts computed by add_line are within sqrt(1^2 + 0.5^2) of the en d points. 764 // All the verts computed by add_line are within sqrt(1^2 + 0.5^2) of the en d points.
765 static const SkScalar kSqrtOfOneAndAQuarter = SkFloatToScalar(1.118f); 765 static const SkScalar kSqrtOfOneAndAQuarter = SkFloatToScalar(1.118f);
766 // Add a little extra to account for vector normalization precision. 766 // Add a little extra to account for vector normalization precision.
767 static const SkScalar kOutset = kSqrtOfOneAndAQuarter + SK_Scalar1 / 20; 767 static const SkScalar kOutset = kSqrtOfOneAndAQuarter + SK_Scalar1 / 20;
768 devBounds->outset(kOutset, kOutset); 768 devBounds->outset(kOutset, kOutset);
769 769
770 return true; 770 return true;
771 } 771 }
772 772
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
832 for (int i = 0; i < conicCnt; ++i) { 832 for (int i = 0; i < conicCnt; ++i) {
833 add_conics(&conics[3*i], cWeights[i], toDevice, toSrc, &verts, devBounds ); 833 add_conics(&conics[3*i], cWeights[i], toDevice, toSrc, &verts, devBounds );
834 } 834 }
835 return true; 835 return true;
836 } 836 }
837 837
838 bool GrAAHairLinePathRenderer::canDrawPath(const SkPath& path, 838 bool GrAAHairLinePathRenderer::canDrawPath(const SkPath& path,
839 const SkStrokeRec& stroke, 839 const SkStrokeRec& stroke,
840 const GrDrawTarget* target, 840 const GrDrawTarget* target,
841 bool antiAlias) const { 841 bool antiAlias) const {
842 if (!stroke.isHairlineStyle() || !antiAlias) { 842 if (!antiAlias) {
843 return false; 843 return false;
844 } 844 }
845 845
846 if (!IsStrokeHairlineOrEquivalent(stroke,
847 target->getDrawState().getViewMatrix(),
848 NULL)) {
849 return false;
850 }
851
846 if (SkPath::kLine_SegmentMask == path.getSegmentMasks() || 852 if (SkPath::kLine_SegmentMask == path.getSegmentMasks() ||
847 target->caps()->shaderDerivativeSupport()) { 853 target->caps()->shaderDerivativeSupport()) {
848 return true; 854 return true;
849 } 855 }
850 return false; 856 return false;
851 } 857 }
852 858
853 template <class VertexType> 859 template <class VertexType>
854 bool check_bounds(GrDrawState* drawState, const SkRect& devBounds, void* vertice s, int vCount) 860 bool check_bounds(GrDrawState* drawState, const SkRect& devBounds, void* vertice s, int vCount)
855 { 861 {
(...skipping 25 matching lines...) Expand all
881 } 887 }
882 } 888 }
883 if (!first) { 889 if (!first) {
884 return tolDevBounds.contains(actualBounds); 890 return tolDevBounds.contains(actualBounds);
885 } 891 }
886 892
887 return true; 893 return true;
888 } 894 }
889 895
890 bool GrAAHairLinePathRenderer::onDrawPath(const SkPath& path, 896 bool GrAAHairLinePathRenderer::onDrawPath(const SkPath& path,
891 const SkStrokeRec&, 897 const SkStrokeRec& stroke,
892 GrDrawTarget* target, 898 GrDrawTarget* target,
893 bool antiAlias) { 899 bool antiAlias) {
900 GrDrawState* drawState = target->drawState();
894 901
895 GrDrawState* drawState = target->drawState(); 902 SkScalar hairlineCoverage;
903 if (IsStrokeHairlineOrEquivalent(stroke,
904 target->getDrawState().getViewMatrix(),
905 &hairlineCoverage)) {
906 uint8_t newCoverage = SkScalarRoundToInt(hairlineCoverage *
907 target->getDrawState().getCover age());
908 target->drawState()->setCoverage(newCoverage);
909 }
896 910
897 SkIRect devClipBounds; 911 SkIRect devClipBounds;
898 target->getClip()->getConservativeBounds(drawState->getRenderTarget(), &devC lipBounds); 912 target->getClip()->getConservativeBounds(drawState->getRenderTarget(), &devC lipBounds);
899 913
900 int lineCnt; 914 int lineCnt;
901 int quadCnt; 915 int quadCnt;
902 int conicCnt; 916 int conicCnt;
903 PREALLOC_PTARRAY(128) lines; 917 PREALLOC_PTARRAY(128) lines;
904 PREALLOC_PTARRAY(128) quads; 918 PREALLOC_PTARRAY(128) quads;
905 PREALLOC_PTARRAY(128) conics; 919 PREALLOC_PTARRAY(128) conics;
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
1028 &devBounds); 1042 &devBounds);
1029 conics += n; 1043 conics += n;
1030 } 1044 }
1031 } 1045 }
1032 } 1046 }
1033 1047
1034 target->resetIndexSource(); 1048 target->resetIndexSource();
1035 1049
1036 return true; 1050 return true;
1037 } 1051 }
OLDNEW
« no previous file with comments | « src/core/SkDrawProcs.h ('k') | src/gpu/GrContext.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698