|
25 | 25 | #include "include/private/SkTDArray.h" |
26 | 26 | #include "include/utils/SkRandom.h" |
27 | 27 | #include "src/shaders/SkLocalMatrixShader.h" |
| 28 | +#include "tools/ToolUtils.h" |
28 | 29 |
|
29 | 30 | #include <initializer_list> |
30 | 31 | #include <utility> |
@@ -295,3 +296,42 @@ DEF_SIMPLE_GM(vertices_data, canvas, 500, 500) { |
295 | 296 | // paint.setShader(sksl_shader); |
296 | 297 | canvas->drawVertices(vert, paint); |
297 | 298 | } |
| 299 | + |
| 300 | +// Test case for skbug.com/10069. We need to draw the vertices twice (with different matrices) to |
| 301 | +// trigger the bug. |
| 302 | +DEF_SIMPLE_GM(vertices_perspective, canvas, 256, 256) { |
| 303 | + SkPaint paint; |
| 304 | + paint.setShader(ToolUtils::create_checkerboard_shader(SK_ColorBLACK, SK_ColorWHITE, 32)); |
| 305 | + |
| 306 | + SkRect r = SkRect::MakeWH(128, 128); |
| 307 | + |
| 308 | + SkPoint pos[4]; |
| 309 | + r.toQuad(pos); |
| 310 | + auto verts = SkVertices::MakeCopy(SkVertices::kTriangleFan_VertexMode, 4, pos, pos, nullptr); |
| 311 | + |
| 312 | + SkMatrix persp; |
| 313 | + persp.setPerspY(SK_Scalar1 / 100); |
| 314 | + |
| 315 | + canvas->save(); |
| 316 | + canvas->concat(persp); |
| 317 | + canvas->drawRect(r, paint); |
| 318 | + canvas->restore(); |
| 319 | + |
| 320 | + canvas->save(); |
| 321 | + canvas->translate(r.width(), 0); |
| 322 | + canvas->concat(persp); |
| 323 | + canvas->drawRect(r, paint); |
| 324 | + canvas->restore(); |
| 325 | + |
| 326 | + canvas->save(); |
| 327 | + canvas->translate(0, r.height()); |
| 328 | + canvas->concat(persp); |
| 329 | + canvas->drawVertices(verts, paint); |
| 330 | + canvas->restore(); |
| 331 | + |
| 332 | + canvas->save(); |
| 333 | + canvas->translate(r.width(), r.height()); |
| 334 | + canvas->concat(persp); |
| 335 | + canvas->drawVertices(verts, paint); |
| 336 | + canvas->restore(); |
| 337 | +} |
0 commit comments