121 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			121 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			C++
		
	
	
	
| /*
 | |
|  * Copyright 2018 Google Inc.
 | |
|  *
 | |
|  * Use of this source code is governed by a BSD-style license that can be
 | |
|  * found in the LICENSE file.
 | |
|  */
 | |
| 
 | |
| #include "gm/gm.h"
 | |
| #include "include/core/SkCanvas.h"
 | |
| #include "include/core/SkColor.h"
 | |
| #include "include/core/SkFont.h"
 | |
| #include "include/core/SkPaint.h"
 | |
| #include "include/core/SkPathBuilder.h"
 | |
| #include "include/core/SkPoint.h"
 | |
| #include "include/core/SkTypes.h"
 | |
| 
 | |
| // This GM shows off a flaw in delta-based rasterizers (DAA, CCPR, etc.).
 | |
| // See also the bottom of dashing4 and skia:6886.
 | |
| 
 | |
| static const int K = 49;
 | |
| 
 | |
| DEF_SIMPLE_GM(daa, canvas, K+350, 5*K) {
 | |
|     SkPaint paint;
 | |
|     paint.setAntiAlias(true);
 | |
| 
 | |
|     {
 | |
|         paint.setColor(SK_ColorBLACK);
 | |
|         canvas->drawString("Should be a green square with no red showing through.",
 | |
|                            K*1.5f, K*0.5f, SkFont(), paint);
 | |
| 
 | |
|         paint.setColor(SK_ColorRED);
 | |
|         canvas->drawRect({0,0,K,K}, paint);
 | |
| 
 | |
|         SkPoint tri1[] = {{0,0},{K,K},{0,K},{0,0}};
 | |
|         SkPoint tri2[] = {{0,0},{K,K},{K,0},{0,0}};
 | |
|         SkPath path = SkPathBuilder().addPolygon(tri1, SK_ARRAY_COUNT(tri1), false)
 | |
|                                      .addPolygon(tri2, SK_ARRAY_COUNT(tri2), false)
 | |
|                                      .detach();
 | |
| 
 | |
|         paint.setColor(SK_ColorGREEN);
 | |
|         canvas->drawPath(path, paint);
 | |
|     }
 | |
| 
 | |
|     canvas->translate(0,K);
 | |
|     {
 | |
|         paint.setColor(SK_ColorBLACK);
 | |
|         canvas->drawString("Adjacent rects, two draws.  Blue then green, no red?",
 | |
|                            K*1.5f, K*0.5f, SkFont(), paint);
 | |
| 
 | |
|         paint.setColor(SK_ColorRED);
 | |
|         canvas->drawRect({0,0,K,K}, paint);
 | |
| 
 | |
|         {
 | |
|             SkPath path = SkPath::Polygon({{0,0},{0,K},{K*0.5f,K},{K*0.5f,0}}, false);
 | |
|             paint.setColor(SK_ColorBLUE);
 | |
|             canvas->drawPath(path, paint);
 | |
|         }
 | |
| 
 | |
|         {
 | |
|             SkPath path = SkPath::Polygon({{K*0.5f,0},{K*0.5f,K},{K,K},{K,0}}, false);
 | |
|             paint.setColor(SK_ColorGREEN);
 | |
|             canvas->drawPath(path, paint);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     canvas->translate(0,K);
 | |
|     {
 | |
|         paint.setColor(SK_ColorBLACK);
 | |
|         canvas->drawString("Adjacent rects, wound together.  All green?",
 | |
|                            K*1.5f, K*0.5f, SkFont(), paint);
 | |
| 
 | |
|         paint.setColor(SK_ColorRED);
 | |
|         canvas->drawRect({0,0,K,K}, paint);
 | |
| 
 | |
|         {
 | |
|             SkPath path = SkPathBuilder().addPolygon({{0,0},{0,K},{K*0.5f,K},{K*0.5f,0}}, false)
 | |
|                                          .addPolygon({{K*0.5f,0},{K*0.5f,K},{K,K},{K,0}}, false)
 | |
|                                          .detach();
 | |
| 
 | |
|             paint.setColor(SK_ColorGREEN);
 | |
|             canvas->drawPath(path, paint);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     canvas->translate(0,K);
 | |
|     {
 | |
|         paint.setColor(SK_ColorBLACK);
 | |
|         canvas->drawString("Adjacent rects, wound opposite.  All green?",
 | |
|                            K*1.5f, K*0.5f, SkFont(), paint);
 | |
| 
 | |
|         paint.setColor(SK_ColorRED);
 | |
|         canvas->drawRect({0,0,K,K}, paint);
 | |
| 
 | |
|         {
 | |
|             SkPath path = SkPathBuilder().addPolygon({{0,0},{0,K},{K*0.5f,K},{K*0.5f,0}}, false)
 | |
|                                          .addPolygon({{K*0.5f,0},{K,0},{K,K},{K*0.5f,K}}, false)
 | |
|                                          .detach();
 | |
| 
 | |
|             paint.setColor(SK_ColorGREEN);
 | |
|             canvas->drawPath(path, paint);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     canvas->translate(0,K);
 | |
|     {
 | |
|         paint.setColor(SK_ColorBLACK);
 | |
|         canvas->drawString("One poly, wound opposite.  All green?",
 | |
|                            K*1.5f, K*0.5f, SkFont(), paint);
 | |
| 
 | |
|         paint.setColor(SK_ColorRED);
 | |
|         canvas->drawRect({0,0,K,K}, paint);
 | |
| 
 | |
|         SkPath path = SkPath::Polygon({{K*0.5f,0},{0,0},{0,K},{K*0.5f,K},
 | |
|                                        {K*0.5f,0},{K,0},{K,K},{K*0.5f,K}},
 | |
|                                       false);
 | |
| 
 | |
|         paint.setColor(SK_ColorGREEN);
 | |
|         canvas->drawPath(path, paint);
 | |
|     }
 | |
| }
 |