Line data Source code
1 : /*
2 : * Copyright 2014 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 SkVertState_DEFINED
9 : #define SkVertState_DEFINED
10 :
11 : #include "SkVertices.h"
12 :
13 : /** \struct VertState
14 : This is a helper for drawVertices(). It is used to iterate over the triangles
15 : that are to be rendered based on an SkCanvas::VertexMode and (optionally) an
16 : index array. It does not copy the index array and the client must ensure it
17 : remains valid for the lifetime of the VertState object.
18 : */
19 :
20 : struct VertState {
21 : int f0, f1, f2;
22 :
23 : /**
24 : * Construct a VertState from a vertex count, index array, and index count.
25 : * If the vertices are unindexed pass nullptr for indices.
26 : */
27 0 : VertState(int vCount, const uint16_t indices[], int indexCount)
28 0 : : fIndices(indices) {
29 0 : fCurrIndex = 0;
30 0 : if (indices) {
31 0 : fCount = indexCount;
32 : } else {
33 0 : fCount = vCount;
34 : }
35 0 : }
36 :
37 : typedef bool (*Proc)(VertState*);
38 :
39 : /**
40 : * Choose an appropriate function to traverse the vertices.
41 : * @param mode Specifies the SkCanvas::VertexMode.
42 : */
43 : Proc chooseProc(SkVertices::VertexMode mode);
44 :
45 : private:
46 : int fCount;
47 : int fCurrIndex;
48 : const uint16_t* fIndices;
49 :
50 : static bool Triangles(VertState*);
51 : static bool TrianglesX(VertState*);
52 : static bool TriangleStrip(VertState*);
53 : static bool TriangleStripX(VertState*);
54 : static bool TriangleFan(VertState*);
55 : static bool TriangleFanX(VertState*);
56 : };
57 :
58 : #endif
|