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 14class SkPath; 15struct SkRect; 16 17/** 18 * Provides utility functions for converting paths to a collection of triangles. 19 */ 20 21#define TESSELLATOR_WIREFRAME 0 22 23namespace GrTessellator { 24 25class VertexAllocator { 26public: 27 VertexAllocator(size_t stride) : fStride(stride) {} 28 virtual ~VertexAllocator() {} 29 virtual void* lock(int vertexCount) = 0; 30 virtual void unlock(int actualCount) = 0; 31 size_t stride() const { return fStride; } 32private: 33 size_t fStride; 34}; 35 36struct 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! 45int PathToVertices(const SkPath& path, SkScalar tolerance, const SkRect& clipBounds, 46 WindingVertex** verts); 47 48int 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