OLD | NEW |
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2011 Google Inc. | 3 * Copyright 2011 Google Inc. |
4 * | 4 * |
5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
7 */ | 7 */ |
8 | 8 |
9 #include "GrContext.h" | 9 #include "GrContext.h" |
10 | 10 |
(...skipping 725 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
736 } | 736 } |
737 } | 737 } |
738 | 738 |
739 GrColor color = paint.getColor(); | 739 GrColor color = paint.getColor(); |
740 SkRect devBoundRect; | 740 SkRect devBoundRect; |
741 bool needAA = paint.isAntiAlias() && !drawState.getRenderTarget()->isMultisa
mpled(); | 741 bool needAA = paint.isAntiAlias() && !drawState.getRenderTarget()->isMultisa
mpled(); |
742 bool doAA = needAA && apply_aa_to_rect(target, &drawState, &devBoundRect, re
ct, width, matrix, | 742 bool doAA = needAA && apply_aa_to_rect(target, &drawState, &devBoundRect, re
ct, width, matrix, |
743 color); | 743 color); |
744 | 744 |
745 if (doAA) { | 745 if (doAA) { |
746 GrDrawState::AutoViewMatrixRestore avmr; | 746 SkMatrix invert; |
747 if (!avmr.setIdentity(&drawState)) { | 747 if (!drawState.getViewMatrix().invert(&invert)) { |
748 return; | 748 return; |
749 } | 749 } |
| 750 GrDrawState::AutoViewMatrixRestore avmr(&drawState); |
750 | 751 |
751 if (width >= 0) { | 752 if (width >= 0) { |
752 const SkStrokeRec& strokeRec = strokeInfo->getStrokeRec(); | 753 const SkStrokeRec& strokeRec = strokeInfo->getStrokeRec(); |
753 fAARectRenderer->strokeAARect(target, | 754 fAARectRenderer->strokeAARect(target, |
754 &drawState, | 755 &drawState, |
755 color, | 756 color, |
| 757 invert, |
756 rect, | 758 rect, |
757 matrix, | 759 matrix, |
758 devBoundRect, | 760 devBoundRect, |
759 strokeRec); | 761 strokeRec); |
760 } else { | 762 } else { |
761 // filled AA rect | 763 // filled AA rect |
762 fAARectRenderer->fillAARect(target, &drawState, color, rect, matrix,
devBoundRect); | 764 fAARectRenderer->fillAARect(target, &drawState, color, invert, rect,
matrix, |
| 765 devBoundRect); |
763 } | 766 } |
764 return; | 767 return; |
765 } | 768 } |
766 | 769 |
767 if (width >= 0) { | 770 if (width >= 0) { |
768 // TODO: consider making static vertex buffers for these cases. | 771 // TODO: consider making static vertex buffers for these cases. |
769 // Hairline could be done by just adding closing vertex to | 772 // Hairline could be done by just adding closing vertex to |
770 // unitSquareVertexBuffer() | 773 // unitSquareVertexBuffer() |
771 | 774 |
772 static const int worstCaseVertCount = 10; | 775 static const int worstCaseVertCount = 10; |
(...skipping 308 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1081 | 1084 |
1082 GrColor color = paint.getColor(); | 1085 GrColor color = paint.getColor(); |
1083 if (strokeInfo.isDashed()) { | 1086 if (strokeInfo.isDashed()) { |
1084 SkPoint pts[2]; | 1087 SkPoint pts[2]; |
1085 if (path.isLine(pts)) { | 1088 if (path.isLine(pts)) { |
1086 AutoCheckFlush acf(this); | 1089 AutoCheckFlush acf(this); |
1087 GrDrawState drawState; | 1090 GrDrawState drawState; |
1088 GrDrawTarget* target = this->prepareToDraw(&drawState, &paint, &view
Matrix, &acf); | 1091 GrDrawTarget* target = this->prepareToDraw(&drawState, &paint, &view
Matrix, &acf); |
1089 if (NULL == target) { | 1092 if (NULL == target) { |
1090 return; | 1093 return; |
1091 }; | 1094 } |
1092 | 1095 |
1093 SkMatrix origViewMatrix = drawState.getViewMatrix(); | 1096 if (GrDashingEffect::DrawDashLine(fGpu, target, &drawState, color, p
ts, paint, |
1094 GrDrawState::AutoViewMatrixRestore avmr; | 1097 strokeInfo)) { |
1095 if (avmr.setIdentity(&drawState)) { | 1098 return; |
1096 if (GrDashingEffect::DrawDashLine(fGpu, target, &drawState, colo
r, pts, paint, | |
1097 strokeInfo, origViewMatrix)) { | |
1098 return; | |
1099 } | |
1100 } | 1099 } |
1101 } | 1100 } |
1102 | 1101 |
1103 // Filter dashed path into new path with the dashing applied | 1102 // Filter dashed path into new path with the dashing applied |
1104 const SkPathEffect::DashInfo& info = strokeInfo.getDashInfo(); | 1103 const SkPathEffect::DashInfo& info = strokeInfo.getDashInfo(); |
1105 SkTLazy<SkPath> effectPath; | 1104 SkTLazy<SkPath> effectPath; |
1106 GrStrokeInfo newStrokeInfo(strokeInfo, false); | 1105 GrStrokeInfo newStrokeInfo(strokeInfo, false); |
1107 SkStrokeRec* stroke = newStrokeInfo.getStrokeRecPtr(); | 1106 SkStrokeRec* stroke = newStrokeInfo.getStrokeRecPtr(); |
1108 if (SkDashPath::FilterDashPath(effectPath.init(), path, stroke, NULL, in
fo)) { | 1107 if (SkDashPath::FilterDashPath(effectPath.init(), path, stroke, NULL, in
fo)) { |
1109 this->drawPath(paint, viewMatrix, *effectPath.get(), newStrokeInfo); | 1108 this->drawPath(paint, viewMatrix, *effectPath.get(), newStrokeInfo); |
(...skipping 21 matching lines...) Expand all Loading... |
1131 const SkStrokeRec& strokeRec = strokeInfo.getStrokeRec(); | 1130 const SkStrokeRec& strokeRec = strokeInfo.getStrokeRec(); |
1132 | 1131 |
1133 bool useCoverageAA = paint.isAntiAlias() && !drawState.getRenderTarget()->is
Multisampled(); | 1132 bool useCoverageAA = paint.isAntiAlias() && !drawState.getRenderTarget()->is
Multisampled(); |
1134 | 1133 |
1135 if (useCoverageAA && strokeRec.getWidth() < 0 && !path.isConvex()) { | 1134 if (useCoverageAA && strokeRec.getWidth() < 0 && !path.isConvex()) { |
1136 // Concave AA paths are expensive - try to avoid them for special cases | 1135 // Concave AA paths are expensive - try to avoid them for special cases |
1137 SkRect rects[2]; | 1136 SkRect rects[2]; |
1138 | 1137 |
1139 if (is_nested_rects(target, &drawState, color, path, strokeRec, rects))
{ | 1138 if (is_nested_rects(target, &drawState, color, path, strokeRec, rects))
{ |
1140 SkMatrix origViewMatrix = drawState.getViewMatrix(); | 1139 SkMatrix origViewMatrix = drawState.getViewMatrix(); |
1141 GrDrawState::AutoViewMatrixRestore avmr; | 1140 |
1142 if (!avmr.setIdentity(&drawState)) { | 1141 SkMatrix invert; |
| 1142 if (!drawState.getViewMatrix().invert(&invert)) { |
1143 return; | 1143 return; |
1144 } | 1144 } |
| 1145 GrDrawState::AutoViewMatrixRestore avmr(&drawState); |
1145 | 1146 |
1146 fAARectRenderer->fillAANestedRects(target, &drawState, color, rects,
origViewMatrix); | 1147 fAARectRenderer->fillAANestedRects(target, &drawState, color, invert
, rects, |
| 1148 origViewMatrix); |
1147 return; | 1149 return; |
1148 } | 1150 } |
1149 } | 1151 } |
1150 | 1152 |
1151 SkRect ovalRect; | 1153 SkRect ovalRect; |
1152 bool isOval = path.isOval(&ovalRect); | 1154 bool isOval = path.isOval(&ovalRect); |
1153 | 1155 |
1154 if (!isOval || path.isInverseFillType() | 1156 if (!isOval || path.isInverseFillType() |
1155 || !fOvalRenderer->drawOval(target, &drawState, color, paint.isAntiAlias
(), ovalRect, | 1157 || !fOvalRenderer->drawOval(target, &drawState, color, paint.isAntiAlias
(), ovalRect, |
1156 strokeRec)) { | 1158 strokeRec)) { |
(...skipping 592 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1749 fResourceCache2->printStats(); | 1751 fResourceCache2->printStats(); |
1750 } | 1752 } |
1751 #endif | 1753 #endif |
1752 | 1754 |
1753 #if GR_GPU_STATS | 1755 #if GR_GPU_STATS |
1754 const GrContext::GPUStats* GrContext::gpuStats() const { | 1756 const GrContext::GPUStats* GrContext::gpuStats() const { |
1755 return fGpu->gpuStats(); | 1757 return fGpu->gpuStats(); |
1756 } | 1758 } |
1757 #endif | 1759 #endif |
1758 | 1760 |
OLD | NEW |