2 * This program is free software; you can redistribute it and/or
3 * modify it under the terms of the GNU General Public License
4 * as published by the Free Software Foundation; either version 2
5 * of the License, or (at your option) any later version.
7 * This program is distributed in the hope that it will be useful,
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 * GNU General Public License for more details.
12 * You should have received a copy of the GNU General Public License
13 * along with this program; if not, write to the Free Software Foundation,
14 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
16 * The Original Code is Copyright (C) 2015 Blender Foundation.
17 * All rights reserved.
20 #ifndef __OPENSUBDIV_CONVERTER_CAPI_H__
21 #define __OPENSUBDIV_CONVERTER_CAPI_H__
27 struct OpenSubdiv_TopologyRefinerDescr;
28 typedef struct OpenSubdiv_TopologyRefinerDescr OpenSubdiv_TopologyRefinerDescr;
30 typedef struct OpenSubdiv_Converter OpenSubdiv_Converter;
32 typedef enum OpenSubdiv_SchemeType {
36 } OpenSubdiv_SchemeType;
38 typedef enum OpenSubdiv_FVarLinearInterpolation {
39 OSD_FVAR_LINEAR_INTERPOLATION_NONE,
40 OSD_FVAR_LINEAR_INTERPOLATION_CORNERS_ONLY,
41 OSD_FVAR_LINEAR_INTERPOLATION_BOUNDARIES,
42 OSD_FVAR_LINEAR_INTERPOLATION_ALL,
43 } OpenSubdiv_FVarLinearInterpolation;
45 typedef struct OpenSubdiv_Converter {
46 /* TODO(sergey): Needs to be implemented. */
47 /* OpenSubdiv::Sdc::Options get_options() const; */
49 OpenSubdiv_SchemeType (*get_scheme_type)(
50 const OpenSubdiv_Converter *converter);
52 OpenSubdiv_FVarLinearInterpolation (*get_fvar_linear_interpolation)(
53 const OpenSubdiv_Converter *converter);
55 int (*get_num_faces)(const OpenSubdiv_Converter *converter);
56 int (*get_num_edges)(const OpenSubdiv_Converter *converter);
57 int (*get_num_verts)(const OpenSubdiv_Converter *converter);
59 /* Face relationships. */
60 int (*get_num_face_verts)(const OpenSubdiv_Converter *converter,
62 void (*get_face_verts)(const OpenSubdiv_Converter *converter,
65 void (*get_face_edges)(const OpenSubdiv_Converter *converter,
69 /* Edge relationships. */
70 void (*get_edge_verts)(const OpenSubdiv_Converter *converter,
73 int (*get_num_edge_faces)(const OpenSubdiv_Converter *converter,
75 void (*get_edge_faces)(const OpenSubdiv_Converter *converter,
78 float (*get_edge_sharpness)(const OpenSubdiv_Converter *converter,
81 /* Vertex relationships. */
82 int (*get_num_vert_edges)(const OpenSubdiv_Converter *converter, int vert);
83 void (*get_vert_edges)(const OpenSubdiv_Converter *converter,
86 int (*get_num_vert_faces)(const OpenSubdiv_Converter *converter, int vert);
87 void (*get_vert_faces)(const OpenSubdiv_Converter *converter,
91 /* Face-varying data. */
92 int (*get_num_uv_layers)(const OpenSubdiv_Converter *converter);
94 void (*precalc_uv_layer)(const OpenSubdiv_Converter *converter, int layer);
95 void (*finish_uv_layer)(const OpenSubdiv_Converter *converter);
97 int (*get_num_uvs)(const OpenSubdiv_Converter *converter);
98 void (*get_uvs)(const OpenSubdiv_Converter *converter, float *uvs);
100 int (*get_face_corner_uv_index)(const OpenSubdiv_Converter *converter,
104 /* User data associated with this converter. */
105 void (*free_user_data)(const OpenSubdiv_Converter *converter);
107 } OpenSubdiv_Converter;
109 OpenSubdiv_TopologyRefinerDescr *openSubdiv_createTopologyRefinerDescr(
110 OpenSubdiv_Converter *converter);
112 void openSubdiv_deleteTopologyRefinerDescr(
113 OpenSubdiv_TopologyRefinerDescr *topology_refiner);
115 /* TODO(sergey): Those calls are not strictly related to conversion.
116 * needs some dedicated file perhaps.
119 int openSubdiv_topologyRefinerGetSubdivLevel(
120 const OpenSubdiv_TopologyRefinerDescr *topology_refiner);
122 int openSubdiv_topologyRefinerGetNumVerts(
123 const OpenSubdiv_TopologyRefinerDescr *topology_refiner);
125 int openSubdiv_topologyRefinerGetNumEdges(
126 const OpenSubdiv_TopologyRefinerDescr *topology_refiner);
128 int openSubdiv_topologyRefinerGetNumFaces(
129 const OpenSubdiv_TopologyRefinerDescr *topology_refiner);
131 int openSubdiv_topologyRefinerGetNumFaceVerts(
132 const OpenSubdiv_TopologyRefinerDescr *topology_refiner,
135 int openSubdiv_topologyRefnerCompareConverter(
136 const OpenSubdiv_TopologyRefinerDescr *topology_refiner,
137 OpenSubdiv_Converter *converter);
143 #endif /* __OPENSUBDIV_CONVERTER_CAPI_H__ */