| OLD | NEW |
| 1 | 1 |
| 2 /* | 2 /* |
| 3 * Copyright 2012 Google Inc. | 3 * Copyright 2012 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 "GrSoftwarePathRenderer.h" | 9 #include "GrSoftwarePathRenderer.h" |
| 10 #include "GrContext.h" | 10 #include "GrContext.h" |
| 11 #include "GrSWMaskHelper.h" | 11 #include "GrSWMaskHelper.h" |
| 12 #include "GrStrokeInfo.h" |
| 12 | 13 |
| 13 //////////////////////////////////////////////////////////////////////////////// | 14 //////////////////////////////////////////////////////////////////////////////// |
| 14 bool GrSoftwarePathRenderer::canDrawPath(const GrDrawTarget*, | 15 bool GrSoftwarePathRenderer::canDrawPath(const GrDrawTarget*, |
| 15 const GrPipelineBuilder*, | 16 const GrPipelineBuilder*, |
| 16 const SkMatrix& viewMatrix, | 17 const SkMatrix& viewMatrix, |
| 17 const SkPath&, | 18 const SkPath&, |
| 18 const SkStrokeRec&, | 19 const GrStrokeInfo&, |
| 19 bool antiAlias) const { | 20 bool antiAlias) const { |
| 20 if (NULL == fContext) { | 21 if (NULL == fContext) { |
| 21 return false; | 22 return false; |
| 22 } | 23 } |
| 23 | 24 |
| 24 return true; | 25 return true; |
| 25 } | 26 } |
| 26 | 27 |
| 27 GrPathRenderer::StencilSupport | 28 GrPathRenderer::StencilSupport |
| 28 GrSoftwarePathRenderer::onGetStencilSupport(const GrDrawTarget*, | 29 GrSoftwarePathRenderer::onGetStencilSupport(const GrDrawTarget*, |
| 29 const GrPipelineBuilder*, | 30 const GrPipelineBuilder*, |
| 30 const SkPath&, | 31 const SkPath&, |
| 31 const SkStrokeRec&) const { | 32 const GrStrokeInfo&) const { |
| 32 return GrPathRenderer::kNoSupport_StencilSupport; | 33 return GrPathRenderer::kNoSupport_StencilSupport; |
| 33 } | 34 } |
| 34 | 35 |
| 35 namespace { | 36 namespace { |
| 36 | 37 |
| 37 //////////////////////////////////////////////////////////////////////////////// | 38 //////////////////////////////////////////////////////////////////////////////// |
| 38 // gets device coord bounds of path (not considering the fill) and clip. The | 39 // gets device coord bounds of path (not considering the fill) and clip. The |
| 39 // path bounds will be a subset of the clip bounds. returns false if | 40 // path bounds will be a subset of the clip bounds. returns false if |
| 40 // path bounds would be empty. | 41 // path bounds would be empty. |
| 41 bool get_path_and_clip_bounds(const GrDrawTarget* target, | 42 bool get_path_and_clip_bounds(const GrDrawTarget* target, |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 112 | 113 |
| 113 } | 114 } |
| 114 | 115 |
| 115 //////////////////////////////////////////////////////////////////////////////// | 116 //////////////////////////////////////////////////////////////////////////////// |
| 116 // return true on success; false on failure | 117 // return true on success; false on failure |
| 117 bool GrSoftwarePathRenderer::onDrawPath(GrDrawTarget* target, | 118 bool GrSoftwarePathRenderer::onDrawPath(GrDrawTarget* target, |
| 118 GrPipelineBuilder* pipelineBuilder, | 119 GrPipelineBuilder* pipelineBuilder, |
| 119 GrColor color, | 120 GrColor color, |
| 120 const SkMatrix& viewMatrix, | 121 const SkMatrix& viewMatrix, |
| 121 const SkPath& path, | 122 const SkPath& path, |
| 122 const SkStrokeRec& stroke, | 123 const GrStrokeInfo& stroke, |
| 123 bool antiAlias) { | 124 bool antiAlias) { |
| 124 | 125 |
| 125 if (NULL == fContext) { | 126 if (NULL == fContext) { |
| 126 return false; | 127 return false; |
| 127 } | 128 } |
| 128 | 129 |
| 129 SkIRect devPathBounds, devClipBounds; | 130 SkIRect devPathBounds, devClipBounds; |
| 130 if (!get_path_and_clip_bounds(target, pipelineBuilder, path, viewMatrix, &de
vPathBounds, | 131 if (!get_path_and_clip_bounds(target, pipelineBuilder, path, viewMatrix, &de
vPathBounds, |
| 131 &devClipBounds)) { | 132 &devClipBounds)) { |
| 132 if (path.isInverseFillType()) { | 133 if (path.isInverseFillType()) { |
| 133 draw_around_inv_path(target, pipelineBuilder, color, viewMatrix, dev
ClipBounds, | 134 draw_around_inv_path(target, pipelineBuilder, color, viewMatrix, dev
ClipBounds, |
| 134 devPathBounds); | 135 devPathBounds); |
| 135 } | 136 } |
| 136 return true; | 137 return true; |
| 137 } | 138 } |
| 138 | 139 |
| 139 SkAutoTUnref<GrTexture> texture( | 140 SkAutoTUnref<GrTexture> texture( |
| 140 GrSWMaskHelper::DrawPathMaskToTexture(fContext, path, stroke, | 141 GrSWMaskHelper::DrawPathMaskToTexture(fContext, path, stroke.getStro
keRec(), |
| 141 devPathBounds, | 142 devPathBounds, |
| 142 antiAlias, &viewMatrix)); | 143 antiAlias, &viewMatrix)); |
| 143 if (NULL == texture) { | 144 if (NULL == texture) { |
| 144 return false; | 145 return false; |
| 145 } | 146 } |
| 146 | 147 |
| 147 GrPipelineBuilder copy = *pipelineBuilder; | 148 GrPipelineBuilder copy = *pipelineBuilder; |
| 148 GrSWMaskHelper::DrawToTargetWithPathMask(texture, target, ©, color, view
Matrix, | 149 GrSWMaskHelper::DrawToTargetWithPathMask(texture, target, ©, color, view
Matrix, |
| 149 devPathBounds); | 150 devPathBounds); |
| 150 | 151 |
| 151 if (path.isInverseFillType()) { | 152 if (path.isInverseFillType()) { |
| 152 draw_around_inv_path(target, pipelineBuilder, color, viewMatrix, devClip
Bounds, | 153 draw_around_inv_path(target, pipelineBuilder, color, viewMatrix, devClip
Bounds, |
| 153 devPathBounds); | 154 devPathBounds); |
| 154 } | 155 } |
| 155 | 156 |
| 156 return true; | 157 return true; |
| 157 } | 158 } |
| OLD | NEW |