29 const OpenSubdiv::Far::TopologyRefiner *getOSDTopologyRefiner(
35 const OpenSubdiv::Far::TopologyLevel &getOSDTopologyBaseLevel(
38 return getOSDTopologyRefiner(topology_refiner)->GetLevel(0);
56 return getOSDTopologyBaseLevel(topology_refiner).GetNumVertices();
61 return getOSDTopologyBaseLevel(topology_refiner).GetNumEdges();
66 return getOSDTopologyBaseLevel(topology_refiner).GetNumFaces();
72 static void convertArrayToRaw(
const OpenSubdiv::Far::ConstIndexArray &
array,
int *raw_array)
75 raw_array[i] =
array[i];
81 const OpenSubdiv::Far::TopologyLevel &base_level = getOSDTopologyBaseLevel(topology_refiner);
82 return base_level.GetFaceVertices(face_index).size();
87 int *face_vertices_indices)
89 const OpenSubdiv::Far::TopologyLevel &base_level = getOSDTopologyBaseLevel(topology_refiner);
90 OpenSubdiv::Far::ConstIndexArray
array = base_level.GetFaceVertices(face_index);
91 convertArrayToRaw(
array, face_vertices_indices);
96 const OpenSubdiv::Far::TopologyLevel &base_level = getOSDTopologyBaseLevel(topology_refiner);
97 return base_level.GetFaceEdges(face_index).size();
101 const int face_index,
102 int *face_edges_indices)
104 const OpenSubdiv::Far::TopologyLevel &base_level = getOSDTopologyBaseLevel(topology_refiner);
105 OpenSubdiv::Far::ConstIndexArray
array = base_level.GetFaceEdges(face_index);
106 convertArrayToRaw(
array, face_edges_indices);
110 const int edge_index,
111 int edge_vertices_indices[2])
113 const OpenSubdiv::Far::TopologyLevel &base_level = getOSDTopologyBaseLevel(topology_refiner);
114 OpenSubdiv::Far::ConstIndexArray
array = base_level.GetEdgeVertices(edge_index);
116 edge_vertices_indices[0] =
array[0];
117 edge_vertices_indices[1] =
array[1];
122 const OpenSubdiv::Far::TopologyLevel &base_level = getOSDTopologyBaseLevel(topology_refiner);
123 return base_level.GetVertexEdges(vertex_index).size();
127 const int vertex_index,
128 int *vertex_edges_indices)
130 const OpenSubdiv::Far::TopologyLevel &base_level = getOSDTopologyBaseLevel(topology_refiner);
131 OpenSubdiv::Far::ConstIndexArray
array = base_level.GetVertexEdges(vertex_index);
132 convertArrayToRaw(
array, vertex_edges_indices);
137 const int num_face_vertices = topology_refiner->
getNumFaceVertices(topology_refiner, face_index);
138 if (num_face_vertices == 4) {
142 return num_face_vertices;
148 const int num_faces = topology_refiner->
getNumFaces(topology_refiner);
149 int num_ptex_faces = 0;
150 for (
int face_index = 0; face_index < num_faces; ++face_index) {
153 return num_ptex_faces;
157 int *face_ptex_index_offset)
159 const int num_faces = topology_refiner->
getNumFaces(topology_refiner);
160 int num_ptex_faces = 0;
161 for (
int face_index = 0; face_index < num_faces; ++face_index) {
162 face_ptex_index_offset[face_index] = num_ptex_faces;
172 const OpenSubdiv::Far::TopologyLevel &base_level = getOSDTopologyBaseLevel(topology_refiner);
173 return base_level.GetNumFVarChannels();
180 getOSDTopologyRefiner(topology_refiner)->GetFVarLinearInterpolation());
185 const OpenSubdiv::Far::TopologyLevel &base_level = getOSDTopologyBaseLevel(topology_refiner);
186 return base_level.GetNumFVarValues(channel);
190 const int face_index,
193 const OpenSubdiv::Far::TopologyLevel &base_level = getOSDTopologyBaseLevel(topology_refiner);
194 return &base_level.GetFaceFVarValues(face_index, channel)[0];
229 assignFunctionPointers(topology_refiner);
230 return topology_refiner;
240 TopologyRefinerImpl *topology_refiner_impl = TopologyRefinerImpl::createFromConverter(converter,
242 if (topology_refiner_impl ==
nullptr) {
249 return topology_refiner;
254 delete topology_refiner->
impl;
Read Guarded memory(de)allocation.
virtual int getNumVertices() const
virtual int getNumEdges() const
OpenSubdiv::Far::TopologyRefiner * topology_refiner
OpenSubdiv_TopologyRefinerSettings settings
bool isEqualToConverter(const OpenSubdiv_Converter *converter) const
OpenSubdiv_FVarLinearInterpolation getCAPIFVarLinearInterpolationFromOSD(OpenSubdiv::Sdc::Options::FVarLinearInterpolation linear_interpolation)
std::vector< ElementType, Eigen::aligned_allocator< ElementType > > vector
OpenSubdiv_FVarLinearInterpolation
int(* getNumVertexEdges)(const struct OpenSubdiv_TopologyRefiner *topology_refiner, const int vertex_index)
int(* getNumFaceVertices)(const struct OpenSubdiv_TopologyRefiner *topology_refiner, const int face_index)
void(* getFaceEdges)(const struct OpenSubdiv_TopologyRefiner *topology_refiner, const int face_index, int *face_edges_indices)
void(* fillFacePtexIndexOffset)(const struct OpenSubdiv_TopologyRefiner *topology_refiner, int *face_ptex_index_offset)
void(* getFaceVertices)(const struct OpenSubdiv_TopologyRefiner *topology_refiner, const int face_index, int *face_vertices_indices)
int(* getNumPtexFaces)(const struct OpenSubdiv_TopologyRefiner *topology_refiner)
void(* getVertexEdges)(const struct OpenSubdiv_TopologyRefiner *topology_refiner, const int vertex_index, int *vertex_edges_indices)
OpenSubdiv_FVarLinearInterpolation(* getFVarLinearInterpolation)(const struct OpenSubdiv_TopologyRefiner *topology_refiner)
struct OpenSubdiv_TopologyRefinerImpl * impl
int(* getNumFVarValues)(const struct OpenSubdiv_TopologyRefiner *topology_refiner, const int channel)
void(* getEdgeVertices)(const struct OpenSubdiv_TopologyRefiner *topology_refiner, const int edge_index, int edge_vertices_indices[2])
bool(* getIsAdaptive)(const struct OpenSubdiv_TopologyRefiner *topology_refiner)
const int *(* getFaceFVarValueIndices)(const struct OpenSubdiv_TopologyRefiner *topology_refiner, const int face_index, const int channel)
int(* getSubdivisionLevel)(const struct OpenSubdiv_TopologyRefiner *topology_refiner)
int(* getNumFaceEdges)(const struct OpenSubdiv_TopologyRefiner *topology_refiner, const int face_index)
int(* getNumFaces)(const struct OpenSubdiv_TopologyRefiner *topology_refiner)
int(* getNumFacePtexFaces)(const struct OpenSubdiv_TopologyRefiner *topology_refiner, const int face_index)
int(* getNumFVarChannels)(const struct OpenSubdiv_TopologyRefiner *topology_refiner)
int(* getNumEdges)(const struct OpenSubdiv_TopologyRefiner *topology_refiner)
int(* getNumVertices)(const struct OpenSubdiv_TopologyRefiner *topology_refiner)
void openSubdiv_deleteTopologyRefiner(OpenSubdiv_TopologyRefiner *topology_refiner)
bool openSubdiv_topologyRefinerCompareWithConverter(const OpenSubdiv_TopologyRefiner *topology_refiner, const OpenSubdiv_Converter *converter)
OpenSubdiv_TopologyRefiner * openSubdiv_createTopologyRefinerFromConverter(OpenSubdiv_Converter *converter, const OpenSubdiv_TopologyRefinerSettings *settings)