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;
255 MEM_delete(topology_refiner);
Read Guarded memory(de)allocation.
in reality light always falls off quadratically Particle Retrieve the data of the particle that spawned the object for example to give variation to multiple instances of an object Point Retrieve information about points in a point cloud Retrieve the edges of an object as it appears to Cycles topology will always appear triangulated Convert a blackbody temperature to an RGB value Normal Generate a perturbed normal from an RGB normal map image Typically used for faking highly detailed surfaces Generate an OSL shader from a file or text data block Image Sample an image file as a texture Sky Generate a procedural sky texture Noise Generate fractal Perlin noise Wave Generate procedural bands or rings with noise Voronoi Generate Worley noise based on the distance to random points Typically used to generate textures such as or biological cells Brick Generate a procedural texture producing bricks Texture Retrieve multiple types of texture coordinates nTypically used as inputs for texture nodes Vector Convert a vector
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)
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)