Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 /* | |
| 2 * Copyright 2015 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 #ifndef GrTessellator_DEFINED | |
| 9 #define GrTessellator_DEFINED | |
| 10 | |
| 11 #include "SkChunkAlloc.h" | |
| 12 #include "GrPathRenderer.h" | |
| 13 | |
| 14 /** | |
| 15 * Provides utility functions for converting paths to a collection of triangles. | |
| 16 */ | |
| 17 | |
| 18 #define TESSELLATOR_WIREFRAME 0 | |
| 19 | |
| 20 namespace GrTessellator { | |
| 21 | |
| 22 struct Poly; | |
| 23 struct Edge; | |
| 24 struct Vertex; | |
| 25 | |
| 26 struct EdgeList { | |
| 27 EdgeList() : fHead(nullptr), fTail(nullptr) {} | |
| 28 Edge* fHead; | |
| 29 Edge* fTail; | |
| 30 }; | |
| 31 | |
| 32 struct Edge { | |
|
Stephen White
2016/01/05 15:59:04
Does this (and EdgeList) need to be public? It onl
ethannicholas
2016/01/05 16:09:22
It did at one point, but you are of course correct
| |
| 33 Edge(Vertex* top, Vertex* bottom, int winding) | |
| 34 : fTop(top) | |
| 35 , fBottom(bottom) | |
| 36 , fWinding(winding) | |
| 37 , fLeft(nullptr) | |
| 38 , fRight(nullptr) | |
| 39 , fPrevEdgeAbove(nullptr) | |
| 40 , fNextEdgeAbove(nullptr) | |
| 41 , fPrevEdgeBelow(nullptr) | |
| 42 , fNextEdgeBelow(nullptr) | |
| 43 , fLeftPoly(nullptr) | |
| 44 , fRightPoly(nullptr) { | |
| 45 recompute(); | |
| 46 } | |
| 47 Vertex* fTop; // The top vertex in vertex-sort-order (sweep_lt). | |
| 48 Vertex* fBottom; // The bottom vertex in vertex-sort-order. | |
| 49 int fWinding; // 1 == edge goes downward; -1 = edge goes upward. | |
| 50 Edge* fLeft; // The linked list of edges in the active edge list. | |
| 51 Edge* fRight; // " | |
| 52 Edge* fPrevEdgeAbove; // The linked list of edges in the bottom Vertex's "e dges above". | |
| 53 Edge* fNextEdgeAbove; // " | |
| 54 Edge* fPrevEdgeBelow; // The linked list of edges in the top Vertex's "edge s below". | |
| 55 Edge* fNextEdgeBelow; // " | |
| 56 Poly* fLeftPoly; // The Poly to the left of this edge, if any. | |
| 57 Poly* fRightPoly; // The Poly to the right of this edge, if any. | |
| 58 double fDX; // The line equation for this edge, in implicit form. | |
| 59 double fDY; // fDY * x + fDX * y + fC = 0, for point (x, y) on th e line. | |
| 60 double fC; | |
| 61 double dist(const SkPoint& p) const; | |
| 62 bool isRightOf(Vertex* v) const; | |
| 63 bool isLeftOf(Vertex* v) const; | |
| 64 void recompute(); | |
| 65 bool intersect(const Edge& other, SkPoint* p); | |
| 66 bool isActive(EdgeList* activeEdges) const; | |
| 67 }; | |
| 68 | |
| 69 struct WindingVertex { | |
| 70 SkPoint fPos; | |
| 71 int fWinding; | |
| 72 }; | |
| 73 | |
| 74 // creates an array of (point, winding) vertices and sets the 'verts' out parame ter to point to it. | |
| 75 // CALLER IS RESPONSIBLE for deleting this buffer to avoid a memory leak! | |
| 76 int PathToVertices(const SkPath& path, SkScalar tolerance, const SkRect& clipBou nds, | |
| 77 WindingVertex** verts); | |
| 78 | |
| 79 int PathToTriangles(const SkPath& path, SkScalar tolerance, const SkRect& clipBo unds, | |
| 80 GrResourceProvider* resourceProvider, | |
| 81 SkAutoTUnref<GrVertexBuffer>& vertexBuffer, bool canMapVB, b ool* isLinear); | |
| 82 | |
| 83 } | |
| 84 | |
| 85 #endif | |
| OLD | NEW |