OpenSubdiv: Add accessor to vertex edges via refiner C-API

This commit is contained in:
Sergey Sharybin
2019-10-02 12:37:44 +02:00
parent f6a90f018c
commit 0cc45eaac4
2 changed files with 25 additions and 0 deletions

View File

@@ -123,6 +123,21 @@ void getEdgeVertices(const OpenSubdiv_TopologyRefiner *topology_refiner,
edge_vertices_indices[1] = array[1]; edge_vertices_indices[1] = array[1];
} }
int getNumVertexEdges(const OpenSubdiv_TopologyRefiner *topology_refiner, const int vertex_index)
{
const OpenSubdiv::Far::TopologyLevel *base_level = getOSDTopologyBaseLevel(topology_refiner);
return base_level->GetVertexEdges(vertex_index).size();
}
void getVertexEdges(const OpenSubdiv_TopologyRefiner *topology_refiner,
const int vertex_index,
int *vertex_edges_indices)
{
const OpenSubdiv::Far::TopologyLevel *base_level = getOSDTopologyBaseLevel(topology_refiner);
OpenSubdiv::Far::ConstIndexArray array = base_level->GetVertexEdges(vertex_index);
convertArrayToRaw(array, vertex_edges_indices);
}
int getNumFacePtexFaces(const OpenSubdiv_TopologyRefiner *topology_refiner, const int face_index) int getNumFacePtexFaces(const OpenSubdiv_TopologyRefiner *topology_refiner, const int face_index)
{ {
const int num_face_vertices = topology_refiner->getNumFaceVertices(topology_refiner, face_index); const int num_face_vertices = topology_refiner->getNumFaceVertices(topology_refiner, face_index);
@@ -201,6 +216,8 @@ void assignFunctionPointers(OpenSubdiv_TopologyRefiner *topology_refiner)
topology_refiner->getNumFaceEdges = getNumFaceEdges; topology_refiner->getNumFaceEdges = getNumFaceEdges;
topology_refiner->getFaceEdges = getFaceEdges; topology_refiner->getFaceEdges = getFaceEdges;
topology_refiner->getEdgeVertices = getEdgeVertices; topology_refiner->getEdgeVertices = getEdgeVertices;
topology_refiner->getNumVertexEdges = getNumVertexEdges;
topology_refiner->getVertexEdges = getVertexEdges;
// PTex face geometry. // PTex face geometry.
topology_refiner->getNumFacePtexFaces = getNumFacePtexFaces; topology_refiner->getNumFacePtexFaces = getNumFacePtexFaces;
topology_refiner->getNumPtexFaces = getNumPtexFaces; topology_refiner->getNumPtexFaces = getNumPtexFaces;

View File

@@ -58,11 +58,13 @@ typedef struct OpenSubdiv_TopologyRefiner {
int (*getNumVertices)(const struct OpenSubdiv_TopologyRefiner *topology_refiner); int (*getNumVertices)(const struct OpenSubdiv_TopologyRefiner *topology_refiner);
int (*getNumEdges)(const struct OpenSubdiv_TopologyRefiner *topology_refiner); int (*getNumEdges)(const struct OpenSubdiv_TopologyRefiner *topology_refiner);
int (*getNumFaces)(const struct OpenSubdiv_TopologyRefiner *topology_refiner); int (*getNumFaces)(const struct OpenSubdiv_TopologyRefiner *topology_refiner);
int (*getNumFaceVertices)(const struct OpenSubdiv_TopologyRefiner *topology_refiner, int (*getNumFaceVertices)(const struct OpenSubdiv_TopologyRefiner *topology_refiner,
const int face_index); const int face_index);
void (*getFaceVertices)(const struct OpenSubdiv_TopologyRefiner *topology_refiner, void (*getFaceVertices)(const struct OpenSubdiv_TopologyRefiner *topology_refiner,
const int face_index, const int face_index,
int *face_vertices_indices); int *face_vertices_indices);
int (*getNumFaceEdges)(const struct OpenSubdiv_TopologyRefiner *topology_refiner, int (*getNumFaceEdges)(const struct OpenSubdiv_TopologyRefiner *topology_refiner,
const int face_index); const int face_index);
void (*getFaceEdges)(const struct OpenSubdiv_TopologyRefiner *topology_refiner, void (*getFaceEdges)(const struct OpenSubdiv_TopologyRefiner *topology_refiner,
@@ -72,6 +74,12 @@ typedef struct OpenSubdiv_TopologyRefiner {
const int edge_index, const int edge_index,
int edge_vertices_indices[2]); int edge_vertices_indices[2]);
int (*getNumVertexEdges)(const struct OpenSubdiv_TopologyRefiner *topology_refiner,
const int vertex_index);
void (*getVertexEdges)(const struct OpenSubdiv_TopologyRefiner *topology_refiner,
const int vertex_index,
int *vertex_edges_indices);
////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////
// PTex face geometry queries. // PTex face geometry queries.