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 "GrColor.h" 12 #include "SkPoint.h" 13 14 class SkPath; 15 struct SkRect; 16 17 /** 18 * Provides utility functions for converting paths to a collection of triangles. 19 */ 20 21 #define TESSELLATOR_WIREFRAME 0 22 23 namespace GrTessellator { 24 25 class VertexAllocator { 26 public: VertexAllocator(size_t stride)27 VertexAllocator(size_t stride) : fStride(stride) {} ~VertexAllocator()28 virtual ~VertexAllocator() {} 29 virtual void* lock(int vertexCount) = 0; 30 virtual void unlock(int actualCount) = 0; stride()31 size_t stride() const { return fStride; } 32 private: 33 size_t fStride; 34 }; 35 36 struct WindingVertex { 37 SkPoint fPos; 38 int fWinding; 39 }; 40 41 // Triangulates a path to an array of vertices. Each triangle is represented as a set of three 42 // WindingVertex entries, each of which contains the position and winding count (which is the same 43 // for all three vertices of a triangle). The 'verts' out parameter is set to point to the resultant 44 // vertex array. CALLER IS RESPONSIBLE for deleting this buffer to avoid a memory leak! 45 int PathToVertices(const SkPath& path, SkScalar tolerance, const SkRect& clipBounds, 46 WindingVertex** verts); 47 48 int PathToTriangles(const SkPath& path, SkScalar tolerance, const SkRect& clipBounds, 49 VertexAllocator*, bool antialias, const GrColor& color, 50 bool canTweakAlphaForCoverage, bool *isLinear); 51 } 52 53 #endif 54