OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2012 Google Inc. | 2 * Copyright 2012 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 | 8 |
9 #include "GrStencilAndCoverPathRenderer.h" | 9 #include "GrStencilAndCoverPathRenderer.h" |
10 #include "GrCaps.h" | 10 #include "GrCaps.h" |
11 #include "GrContext.h" | 11 #include "GrContext.h" |
12 #include "GrDrawContextPriv.h" | 12 #include "GrDrawContextPriv.h" |
13 #include "GrDrawPathBatch.h" | 13 #include "GrDrawPathBatch.h" |
14 #include "GrGpu.h" | 14 #include "GrGpu.h" |
15 #include "GrPath.h" | 15 #include "GrPath.h" |
16 #include "GrPipelineBuilder.h" | |
17 #include "GrRenderTarget.h" | 16 #include "GrRenderTarget.h" |
18 #include "GrResourceProvider.h" | 17 #include "GrResourceProvider.h" |
19 #include "GrStencilPathBatch.h" | 18 #include "GrStencilPathBatch.h" |
20 #include "GrStyle.h" | 19 #include "GrStyle.h" |
21 #include "batches/GrRectBatchFactory.h" | 20 #include "batches/GrRectBatchFactory.h" |
22 | 21 |
23 GrPathRenderer* GrStencilAndCoverPathRenderer::Create(GrResourceProvider* resour
ceProvider, | 22 GrPathRenderer* GrStencilAndCoverPathRenderer::Create(GrResourceProvider* resour
ceProvider, |
24 const GrCaps& caps) { | 23 const GrCaps& caps) { |
25 if (caps.shaderCaps()->pathRenderingSupport()) { | 24 if (caps.shaderCaps()->pathRenderingSupport()) { |
26 return new GrStencilAndCoverPathRenderer(resourceProvider); | 25 return new GrStencilAndCoverPathRenderer(resourceProvider); |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
130 if (!viewMatrix.invert(&invert)) { | 129 if (!viewMatrix.invert(&invert)) { |
131 return false; | 130 return false; |
132 } | 131 } |
133 } | 132 } |
134 const SkMatrix& viewM = viewMatrix.hasPerspective() ? SkMatrix::I() : vi
ewMatrix; | 133 const SkMatrix& viewM = viewMatrix.hasPerspective() ? SkMatrix::I() : vi
ewMatrix; |
135 | 134 |
136 SkAutoTUnref<GrDrawBatch> coverBatch( | 135 SkAutoTUnref<GrDrawBatch> coverBatch( |
137 GrRectBatchFactory::CreateNonAAFill(args.fPaint->getColor(), vie
wM, bounds, | 136 GrRectBatchFactory::CreateNonAAFill(args.fPaint->getColor(), vie
wM, bounds, |
138 nullptr, &invert)); | 137 nullptr, &invert)); |
139 | 138 |
140 { | 139 SkASSERT(args.fDrawContext->mustUseHWAA(*args.fPaint) == |
141 GrPipelineBuilder pipelineBuilder(*args.fPaint, | 140 (args.fPaint->isAntiAlias() && !args.fDrawContext->hasMixedSamp
les())); |
142 args.fPaint->isAntiAlias() && | 141 args.fDrawContext->drawBatch(*args.fPaint, *args.fClip, kInvertedCoverPa
ss, coverBatch); |
143 !args.fDrawContext->hasMixedSample
s()); | |
144 pipelineBuilder.setUserStencil(&kInvertedCoverPass); | |
145 | |
146 args.fDrawContext->drawBatch(pipelineBuilder, *args.fClip, coverBatc
h); | |
147 } | |
148 } else { | 142 } else { |
149 static constexpr GrUserStencilSettings kCoverPass( | 143 static constexpr GrUserStencilSettings kCoverPass( |
150 GrUserStencilSettings::StaticInit< | 144 GrUserStencilSettings::StaticInit< |
151 0x0000, | 145 0x0000, |
152 GrUserStencilTest::kNotEqual, | 146 GrUserStencilTest::kNotEqual, |
153 0xffff, | 147 0xffff, |
154 GrUserStencilOp::kZero, | 148 GrUserStencilOp::kZero, |
155 GrUserStencilOp::kKeep, | 149 GrUserStencilOp::kKeep, |
156 0xffff>() | 150 0xffff>() |
157 ); | 151 ); |
158 | 152 |
159 SkAutoTUnref<GrDrawBatch> batch( | 153 SkAutoTUnref<GrDrawBatch> batch( |
160 GrDrawPathBatch::Create(viewMatrix, args.fPaint->getColor(), p->
getFillType(), p)); | 154 GrDrawPathBatch::Create(viewMatrix, args.fPaint->getColor(), p->
getFillType(), p)); |
161 | 155 |
162 GrPipelineBuilder pipelineBuilder(*args.fPaint, args.fPaint->isAntiAlias
()); | 156 SkASSERT(args.fDrawContext->mustUseHWAA(*args.fPaint) == |
163 pipelineBuilder.setUserStencil(&kCoverPass); | 157 (args.fPaint->isAntiAlias() || args.fAntiAlias)); |
164 if (args.fAntiAlias) { | 158 args.fDrawContext->drawBatch(*args.fPaint, *args.fClip, kCoverPass, batc
h); |
165 SkASSERT(args.fDrawContext->isStencilBufferMultisampled()); | |
166 pipelineBuilder.enableState(GrPipelineBuilder::kHWAntialias_Flag); | |
167 } | |
168 | |
169 args.fDrawContext->drawBatch(pipelineBuilder, *args.fClip, batch); | |
170 } | 159 } |
171 | 160 |
172 return true; | 161 return true; |
173 } | 162 } |
OLD | NEW |