[Bf-blender-cvs] [0cc45eaac4b] master: OpenSubdiv: Add accessor to vertex edges via refiner C-API

Sergey Sharybin noreply at git.blender.org
Thu Oct 3 12:36:07 CEST 2019


Commit: 0cc45eaac4b9a285e1d1eea12adb355c661f2da7
Author: Sergey Sharybin
Date:   Wed Oct 2 12:37:44 2019 +0200
Branches: master
https://developer.blender.org/rB0cc45eaac4b9a285e1d1eea12adb355c661f2da7

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

===================================================================

M	intern/opensubdiv/internal/opensubdiv_topology_refiner.cc
M	intern/opensubdiv/opensubdiv_topology_refiner_capi.h

===================================================================

diff --git a/intern/opensubdiv/internal/opensubdiv_topology_refiner.cc b/intern/opensubdiv/internal/opensubdiv_topology_refiner.cc
index 30013966961..ac27cbdefdc 100644
--- a/intern/opensubdiv/internal/opensubdiv_topology_refiner.cc
+++ b/intern/opensubdiv/internal/opensubdiv_topology_refiner.cc
@@ -123,6 +123,21 @@ void getEdgeVertices(const OpenSubdiv_TopologyRefiner *topology_refiner,
   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)
 {
   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->getFaceEdges = getFaceEdges;
   topology_refiner->getEdgeVertices = getEdgeVertices;
+  topology_refiner->getNumVertexEdges = getNumVertexEdges;
+  topology_refiner->getVertexEdges = getVertexEdges;
   // PTex face geometry.
   topology_refiner->getNumFacePtexFaces = getNumFacePtexFaces;
   topology_refiner->getNumPtexFaces = getNumPtexFaces;
diff --git a/intern/opensubdiv/opensubdiv_topology_refiner_capi.h b/intern/opensubdiv/opensubdiv_topology_refiner_capi.h
index cf7f59adf2f..38d722ab572 100644
--- a/intern/opensubdiv/opensubdiv_topology_refiner_capi.h
+++ b/intern/opensubdiv/opensubdiv_topology_refiner_capi.h
@@ -58,11 +58,13 @@ typedef struct OpenSubdiv_TopologyRefiner {
   int (*getNumVertices)(const struct OpenSubdiv_TopologyRefiner *topology_refiner);
   int (*getNumEdges)(const struct OpenSubdiv_TopologyRefiner *topology_refiner);
   int (*getNumFaces)(const struct OpenSubdiv_TopologyRefiner *topology_refiner);
+
   int (*getNumFaceVertices)(const struct OpenSubdiv_TopologyRefiner *topology_refiner,
                             const int face_index);
   void (*getFaceVertices)(const struct OpenSubdiv_TopologyRefiner *topology_refiner,
                           const int face_index,
                           int *face_vertices_indices);
+
   int (*getNumFaceEdges)(const struct OpenSubdiv_TopologyRefiner *topology_refiner,
                          const int face_index);
   void (*getFaceEdges)(const struct OpenSubdiv_TopologyRefiner *topology_refiner,
@@ -72,6 +74,12 @@ typedef struct OpenSubdiv_TopologyRefiner {
                           const int edge_index,
                           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.



More information about the Bf-blender-cvs mailing list