| 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 |