Home | History | Annotate | Download | only in gm
      1 /*
      2  * Copyright 2018 Google Inc.
      3  *
      4  * Use of this source code is governed by a BSD-style license that can be
      5  * found in the LICENSE file.
      6  */
      7 
      8 #include "gm.h"
      9 #include "SkFont.h"
     10 #include "SkPath.h"
     11 
     12 // This GM shows off a flaw in delta-based rasterizers (DAA, CCPR, etc.).
     13 // See also the bottom of dashing4 and skia:6886.
     14 
     15 static const int K = 49;
     16 
     17 DEF_SIMPLE_GM(daa, canvas, K+350, 5*K) {
     18     SkPaint paint;
     19     paint.setAntiAlias(true);
     20 
     21     {
     22         paint.setColor(SK_ColorBLACK);
     23         canvas->drawString("Should be a green square with no red showing through.",
     24                            K*1.5f, K*0.5f, SkFont(), paint);
     25 
     26         paint.setColor(SK_ColorRED);
     27         canvas->drawRect({0,0,K,K}, paint);
     28 
     29         SkPath path;
     30         SkPoint tri1[] = {{0,0},{K,K},{0,K},{0,0}};
     31         SkPoint tri2[] = {{0,0},{K,K},{K,0},{0,0}};
     32         path.addPoly(tri1, SK_ARRAY_COUNT(tri1), false);
     33         path.addPoly(tri2, SK_ARRAY_COUNT(tri2), false);
     34 
     35         paint.setColor(SK_ColorGREEN);
     36         canvas->drawPath(path, paint);
     37     }
     38 
     39     canvas->translate(0,K);
     40     {
     41         paint.setColor(SK_ColorBLACK);
     42         canvas->drawString("Adjacent rects, two draws.  Blue then green, no red?",
     43                            K*1.5f, K*0.5f, SkFont(), paint);
     44 
     45         paint.setColor(SK_ColorRED);
     46         canvas->drawRect({0,0,K,K}, paint);
     47 
     48         {
     49             SkPath path;
     50             SkPoint rect1[] = {{0,0},{0,K},{K*0.5f,K},{K*0.5f,0}};
     51             path.addPoly(rect1, SK_ARRAY_COUNT(rect1), false);
     52 
     53             paint.setColor(SK_ColorBLUE);
     54             canvas->drawPath(path, paint);
     55         }
     56 
     57         {
     58             SkPath path;
     59             SkPoint rect2[] = {{K*0.5f,0},{K*0.5f,K},{K,K},{K,0}};
     60             path.addPoly(rect2, SK_ARRAY_COUNT(rect2), false);
     61 
     62             paint.setColor(SK_ColorGREEN);
     63             canvas->drawPath(path, paint);
     64         }
     65     }
     66 
     67     canvas->translate(0,K);
     68     {
     69         paint.setColor(SK_ColorBLACK);
     70         canvas->drawString("Adjacent rects, wound together.  All green?",
     71                            K*1.5f, K*0.5f, SkFont(), paint);
     72 
     73         paint.setColor(SK_ColorRED);
     74         canvas->drawRect({0,0,K,K}, paint);
     75 
     76         {
     77             SkPath path;
     78             SkPoint rect1[] = {{0,0},{0,K},{K*0.5f,K},{K*0.5f,0}};
     79             SkPoint rect2[] = {{K*0.5f,0},{K*0.5f,K},{K,K},{K,0}};
     80 
     81             path.addPoly(rect1, SK_ARRAY_COUNT(rect1), false);
     82             path.addPoly(rect2, SK_ARRAY_COUNT(rect2), false);
     83 
     84             paint.setColor(SK_ColorGREEN);
     85             canvas->drawPath(path, paint);
     86         }
     87     }
     88 
     89     canvas->translate(0,K);
     90     {
     91         paint.setColor(SK_ColorBLACK);
     92         canvas->drawString("Adjacent rects, wound opposite.  All green?",
     93                            K*1.5f, K*0.5f, SkFont(), paint);
     94 
     95         paint.setColor(SK_ColorRED);
     96         canvas->drawRect({0,0,K,K}, paint);
     97 
     98         {
     99             SkPath path;
    100             SkPoint rect1[] = {{0,0},{0,K},{K*0.5f,K},{K*0.5f,0}};
    101             SkPoint rect2[] = {{K*0.5f,0},{K,0},{K,K},{K*0.5f,K}};
    102 
    103             path.addPoly(rect1, SK_ARRAY_COUNT(rect1), false);
    104             path.addPoly(rect2, SK_ARRAY_COUNT(rect2), false);
    105 
    106             paint.setColor(SK_ColorGREEN);
    107             canvas->drawPath(path, paint);
    108         }
    109     }
    110 
    111     canvas->translate(0,K);
    112     {
    113         paint.setColor(SK_ColorBLACK);
    114         canvas->drawString("One poly, wound opposite.  All green?",
    115                            K*1.5f, K*0.5f, SkFont(), paint);
    116 
    117         paint.setColor(SK_ColorRED);
    118         canvas->drawRect({0,0,K,K}, paint);
    119 
    120         {
    121             SkPath path;
    122             SkPoint poly[] = {{K*0.5f,0},{0,0},{0,K},{K*0.5f,K},{K*0.5f,0},{K,0},{K,K},{K*0.5f,K}};
    123 
    124             path.addPoly(poly, SK_ARRAY_COUNT(poly), false);
    125 
    126             paint.setColor(SK_ColorGREEN);
    127             canvas->drawPath(path, paint);
    128         }
    129     }
    130 }
    131