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 // This test only works with the GPU backend. | 8 // This test only works with the GPU backend. |
9 | 9 |
10 #include "gm.h" | 10 #include "gm.h" |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
146 // vertically/horizontally thin rects that don't cover pixel centers | 146 // vertically/horizontally thin rects that don't cover pixel centers |
147 fRects.addToTail(SkRect::MakeLTRB(5.55f, 0.5f, 5.75f, 24.5f)); | 147 fRects.addToTail(SkRect::MakeLTRB(5.55f, 0.5f, 5.75f, 24.5f)); |
148 fRects.addToTail(SkRect::MakeLTRB(5.5f, .05f, 29.5f, .25f)); | 148 fRects.addToTail(SkRect::MakeLTRB(5.5f, .05f, 29.5f, .25f)); |
149 // small in x and y | 149 // small in x and y |
150 fRects.addToTail(SkRect::MakeLTRB(5.05f, .55f, 5.45f, .85f)); | 150 fRects.addToTail(SkRect::MakeLTRB(5.05f, .55f, 5.45f, .85f)); |
151 // inverted in x and y | 151 // inverted in x and y |
152 fRects.addToTail(SkRect::MakeLTRB(100.f, 50.5f, 5.f, 0.5f)); | 152 fRects.addToTail(SkRect::MakeLTRB(100.f, 50.5f, 5.f, 0.5f)); |
153 } | 153 } |
154 | 154 |
155 void onDraw(SkCanvas* canvas) override { | 155 void onDraw(SkCanvas* canvas) override { |
156 GrRenderTarget* rt = canvas->internal_private_accessTopLayerRenderTarget
(); | 156 GrDrawContext* drawContext = canvas->internal_private_accessTopLayerDraw
Context(); |
157 if (nullptr == rt) { | 157 if (!drawContext) { |
158 skiagm::GM::DrawGpuOnlyMessage(canvas); | 158 skiagm::GM::DrawGpuOnlyMessage(canvas); |
159 return; | 159 return; |
160 } | 160 } |
161 GrContext* context = rt->getContext(); | |
162 if (nullptr == context) { | |
163 return; | |
164 } | |
165 | 161 |
166 sk_sp<GrDrawContext> drawContext(context->drawContext(sk_ref_sp(rt))); | |
167 if (!drawContext) { | |
168 return; | |
169 } | |
170 | |
171 SkScalar y = 0; | 162 SkScalar y = 0; |
172 static const SkScalar kDX = 12.f; | 163 static const SkScalar kDX = 12.f; |
173 for (PathList::Iter iter(fPaths, PathList::Iter::kHead_IterStart); | 164 for (PathList::Iter iter(fPaths, PathList::Iter::kHead_IterStart); |
174 iter.get(); | 165 iter.get(); |
175 iter.next()) { | 166 iter.next()) { |
176 const SkPath* path = iter.get(); | 167 const SkPath* path = iter.get(); |
177 SkScalar x = 0; | 168 SkScalar x = 0; |
178 | 169 |
179 for (int et = 0; et < kGrProcessorEdgeTypeCnt; ++et) { | 170 for (int et = 0; et < kGrProcessorEdgeTypeCnt; ++et) { |
180 const SkMatrix m = SkMatrix::MakeTrans(x, y); | 171 const SkMatrix m = SkMatrix::MakeTrans(x, y); |
181 SkPath p; | 172 SkPath p; |
182 path->transform(m, &p); | 173 path->transform(m, &p); |
183 | 174 |
184 GrPrimitiveEdgeType edgeType = (GrPrimitiveEdgeType) et; | 175 GrPrimitiveEdgeType edgeType = (GrPrimitiveEdgeType) et; |
185 SkAutoTUnref<GrFragmentProcessor> fp(GrConvexPolyEffect::Create(
edgeType, p)); | 176 SkAutoTUnref<GrFragmentProcessor> fp(GrConvexPolyEffect::Create(
edgeType, p)); |
186 if (!fp) { | 177 if (!fp) { |
187 continue; | 178 continue; |
188 } | 179 } |
189 | 180 |
190 GrPipelineBuilder pipelineBuilder; | 181 GrPipelineBuilder pipelineBuilder; |
191 pipelineBuilder.setXPFactory( | 182 pipelineBuilder.setXPFactory( |
192 GrPorterDuffXPFactory::Create(SkXfermode::kSrc_Mode))->unref
(); | 183 GrPorterDuffXPFactory::Create(SkXfermode::kSrc_Mode))->unref
(); |
193 pipelineBuilder.addCoverageFragmentProcessor(fp); | 184 pipelineBuilder.addCoverageFragmentProcessor(fp); |
194 pipelineBuilder.setRenderTarget(rt); | 185 pipelineBuilder.setRenderTarget(drawContext->accessRenderTarget(
)); |
195 | 186 |
196 SkAutoTUnref<GrDrawBatch> batch(new PolyBoundsBatch(p.getBounds(
), 0xff000000)); | 187 SkAutoTUnref<GrDrawBatch> batch(new PolyBoundsBatch(p.getBounds(
), 0xff000000)); |
197 | 188 |
198 drawContext->drawContextPriv().testingOnly_drawBatch(pipelineBui
lder, batch); | 189 drawContext->drawContextPriv().testingOnly_drawBatch(pipelineBui
lder, batch); |
199 | 190 |
200 x += SkScalarCeilToScalar(path->getBounds().width() + kDX); | 191 x += SkScalarCeilToScalar(path->getBounds().width() + kDX); |
201 } | 192 } |
202 | 193 |
203 // Draw AA and non AA paths using normal API for reference. | 194 // Draw AA and non AA paths using normal API for reference. |
204 canvas->save(); | 195 canvas->save(); |
(...skipping 20 matching lines...) Expand all Loading... |
225 GrPrimitiveEdgeType edgeType = (GrPrimitiveEdgeType) et; | 216 GrPrimitiveEdgeType edgeType = (GrPrimitiveEdgeType) et; |
226 SkAutoTUnref<GrFragmentProcessor> fp(GrConvexPolyEffect::Create(
edgeType, rect)); | 217 SkAutoTUnref<GrFragmentProcessor> fp(GrConvexPolyEffect::Create(
edgeType, rect)); |
227 if (!fp) { | 218 if (!fp) { |
228 continue; | 219 continue; |
229 } | 220 } |
230 | 221 |
231 GrPipelineBuilder pipelineBuilder; | 222 GrPipelineBuilder pipelineBuilder; |
232 pipelineBuilder.setXPFactory( | 223 pipelineBuilder.setXPFactory( |
233 GrPorterDuffXPFactory::Create(SkXfermode::kSrc_Mode))->unref
(); | 224 GrPorterDuffXPFactory::Create(SkXfermode::kSrc_Mode))->unref
(); |
234 pipelineBuilder.addCoverageFragmentProcessor(fp); | 225 pipelineBuilder.addCoverageFragmentProcessor(fp); |
235 pipelineBuilder.setRenderTarget(rt); | 226 pipelineBuilder.setRenderTarget(drawContext->accessRenderTarget(
)); |
236 | 227 |
237 SkAutoTUnref<GrDrawBatch> batch(new PolyBoundsBatch(rect, 0xff00
0000)); | 228 SkAutoTUnref<GrDrawBatch> batch(new PolyBoundsBatch(rect, 0xff00
0000)); |
238 | 229 |
239 drawContext->drawContextPriv().testingOnly_drawBatch(pipelineBui
lder, batch); | 230 drawContext->drawContextPriv().testingOnly_drawBatch(pipelineBui
lder, batch); |
240 | 231 |
241 x += SkScalarCeilToScalar(rect.width() + kDX); | 232 x += SkScalarCeilToScalar(rect.width() + kDX); |
242 } | 233 } |
243 | 234 |
244 // Draw rect without and with AA using normal API for reference | 235 // Draw rect without and with AA using normal API for reference |
245 canvas->save(); | 236 canvas->save(); |
(...skipping 15 matching lines...) Expand all Loading... |
261 PathList fPaths; | 252 PathList fPaths; |
262 RectList fRects; | 253 RectList fRects; |
263 | 254 |
264 typedef GM INHERITED; | 255 typedef GM INHERITED; |
265 }; | 256 }; |
266 | 257 |
267 DEF_GM(return new ConvexPolyEffect;) | 258 DEF_GM(return new ConvexPolyEffect;) |
268 } | 259 } |
269 | 260 |
270 #endif | 261 #endif |
OLD | NEW |