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