OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2014 Google Inc. | 2 * Copyright 2014 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 "GrDashingEffect.h" | 8 #include "GrDashingEffect.h" |
9 | 9 |
10 #include "../GrAARectRenderer.h" | 10 #include "../GrAARectRenderer.h" |
(...skipping 10 matching lines...) Expand all Loading... |
21 #include "SkGr.h" | 21 #include "SkGr.h" |
22 #include "gl/GrGLGeometryProcessor.h" | 22 #include "gl/GrGLGeometryProcessor.h" |
23 #include "gl/GrGLProcessor.h" | 23 #include "gl/GrGLProcessor.h" |
24 #include "gl/GrGLSL.h" | 24 #include "gl/GrGLSL.h" |
25 #include "gl/builders/GrGLProgramBuilder.h" | 25 #include "gl/builders/GrGLProgramBuilder.h" |
26 | 26 |
27 /////////////////////////////////////////////////////////////////////////////// | 27 /////////////////////////////////////////////////////////////////////////////// |
28 | 28 |
29 // Returns whether or not the gpu can fast path the dash line effect. | 29 // Returns whether or not the gpu can fast path the dash line effect. |
30 static bool can_fast_path_dash(const SkPoint pts[2], const GrStrokeInfo& strokeI
nfo, | 30 static bool can_fast_path_dash(const SkPoint pts[2], const GrStrokeInfo& strokeI
nfo, |
31 const GrDrawTarget& target, const GrDrawState& ds
, | 31 const GrDrawTarget& target, const GrPipelineBuild
er& pipelineBuilder, |
32 const SkMatrix& viewMatrix) { | 32 const SkMatrix& viewMatrix) { |
33 if (ds.getRenderTarget()->isMultisampled()) { | 33 if (pipelineBuilder.getRenderTarget()->isMultisampled()) { |
34 return false; | 34 return false; |
35 } | 35 } |
36 | 36 |
37 // Pts must be either horizontal or vertical in src space | 37 // Pts must be either horizontal or vertical in src space |
38 if (pts[0].fX != pts[1].fX && pts[0].fY != pts[1].fY) { | 38 if (pts[0].fX != pts[1].fX && pts[0].fY != pts[1].fY) { |
39 return false; | 39 return false; |
40 } | 40 } |
41 | 41 |
42 // May be able to relax this to include skew. As of now cannot do perspectiv
e | 42 // May be able to relax this to include skew. As of now cannot do perspectiv
e |
43 // because of the non uniform scaling of bloating a rect | 43 // because of the non uniform scaling of bloating a rect |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
157 | 157 |
158 static void setup_dashed_rect_pos(const SkRect& rect, int idx, const SkMatrix& m
atrix, | 158 static void setup_dashed_rect_pos(const SkRect& rect, int idx, const SkMatrix& m
atrix, |
159 SkPoint* verts) { | 159 SkPoint* verts) { |
160 verts[idx] = SkPoint::Make(rect.fLeft, rect.fTop); | 160 verts[idx] = SkPoint::Make(rect.fLeft, rect.fTop); |
161 verts[idx + 1] = SkPoint::Make(rect.fLeft, rect.fBottom); | 161 verts[idx + 1] = SkPoint::Make(rect.fLeft, rect.fBottom); |
162 verts[idx + 2] = SkPoint::Make(rect.fRight, rect.fBottom); | 162 verts[idx + 2] = SkPoint::Make(rect.fRight, rect.fBottom); |
163 verts[idx + 3] = SkPoint::Make(rect.fRight, rect.fTop); | 163 verts[idx + 3] = SkPoint::Make(rect.fRight, rect.fTop); |
164 matrix.mapPoints(&verts[idx], 4); | 164 matrix.mapPoints(&verts[idx], 4); |
165 } | 165 } |
166 | 166 |
167 bool GrDashingEffect::DrawDashLine(GrGpu* gpu, GrDrawTarget* target, GrDrawState
* drawState, | 167 bool GrDashingEffect::DrawDashLine(GrGpu* gpu, GrDrawTarget* target, |
168 GrColor color, const SkMatrix& viewMatrix, co
nst SkPoint pts[2], | 168 GrPipelineBuilder* pipelineBuilder, GrColor c
olor, |
| 169 const SkMatrix& viewMatrix, const SkPoint pts
[2], |
169 const GrPaint& paint, const GrStrokeInfo& str
okeInfo) { | 170 const GrPaint& paint, const GrStrokeInfo& str
okeInfo) { |
170 if (!can_fast_path_dash(pts, strokeInfo, *target, *drawState, viewMatrix)) { | 171 if (!can_fast_path_dash(pts, strokeInfo, *target, *pipelineBuilder, viewMatr
ix)) { |
171 return false; | 172 return false; |
172 } | 173 } |
173 | 174 |
174 const SkPathEffect::DashInfo& info = strokeInfo.getDashInfo(); | 175 const SkPathEffect::DashInfo& info = strokeInfo.getDashInfo(); |
175 | 176 |
176 SkPaint::Cap cap = strokeInfo.getStrokeRec().getCap(); | 177 SkPaint::Cap cap = strokeInfo.getStrokeRec().getCap(); |
177 | 178 |
178 SkScalar srcStrokeWidth = strokeInfo.getStrokeRec().getWidth(); | 179 SkScalar srcStrokeWidth = strokeInfo.getStrokeRec().getWidth(); |
179 | 180 |
180 // the phase should be normalized to be [0, sum of all intervals) | 181 // the phase should be normalized to be [0, sum of all intervals) |
(...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
435 devIntervals[0], halfDevStroke); | 436 devIntervals[0], halfDevStroke); |
436 } else { | 437 } else { |
437 SkPoint* verts = reinterpret_cast<SkPoint*>(geo.vertices()); | 438 SkPoint* verts = reinterpret_cast<SkPoint*>(geo.vertices()); |
438 SkASSERT(gp->getVertexStride() == sizeof(SkPoint)); | 439 SkASSERT(gp->getVertexStride() == sizeof(SkPoint)); |
439 setup_dashed_rect_pos(endRect, curVIdx, combinedMatrix, verts); | 440 setup_dashed_rect_pos(endRect, curVIdx, combinedMatrix, verts); |
440 } | 441 } |
441 | 442 |
442 } | 443 } |
443 | 444 |
444 target->setIndexSourceToBuffer(gpu->getContext()->getQuadIndexBuffer()); | 445 target->setIndexSourceToBuffer(gpu->getContext()->getQuadIndexBuffer()); |
445 target->drawIndexedInstances(drawState, gp, kTriangles_GrPrimitiveType, tota
lRectCnt, 4, 6); | 446 target->drawIndexedInstances(pipelineBuilder, gp, kTriangles_GrPrimitiveType
, |
| 447 totalRectCnt, 4, 6); |
446 target->resetIndexSource(); | 448 target->resetIndexSource(); |
447 return true; | 449 return true; |
448 } | 450 } |
449 | 451 |
450 ////////////////////////////////////////////////////////////////////////////// | 452 ////////////////////////////////////////////////////////////////////////////// |
451 | 453 |
452 class GLDashingCircleEffect; | 454 class GLDashingCircleEffect; |
453 | 455 |
454 struct DashingCircleBatchTracker { | 456 struct DashingCircleBatchTracker { |
455 GrGPInput fInputColorType; | 457 GrGPInput fInputColorType; |
(...skipping 607 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1063 return DashingCircleEffect::Create(color, edgeType, info, | 1065 return DashingCircleEffect::Create(color, edgeType, info, |
1064 SkScalarHalf(strokeWidth), | 1066 SkScalarHalf(strokeWidth), |
1065 localMatrix); | 1067 localMatrix); |
1066 case GrDashingEffect::kNonRound_DashCap: | 1068 case GrDashingEffect::kNonRound_DashCap: |
1067 return DashingLineEffect::Create(color, edgeType, info, strokeWidth,
localMatrix); | 1069 return DashingLineEffect::Create(color, edgeType, info, strokeWidth,
localMatrix); |
1068 default: | 1070 default: |
1069 SkFAIL("Unexpected dashed cap."); | 1071 SkFAIL("Unexpected dashed cap."); |
1070 } | 1072 } |
1071 return NULL; | 1073 return NULL; |
1072 } | 1074 } |
OLD | NEW |