diff options
Diffstat (limited to 'intern/opensubdiv/internal/topology/topology_refiner_factory.cc')
-rw-r--r-- | intern/opensubdiv/internal/topology/topology_refiner_factory.cc | 30 |
1 files changed, 6 insertions, 24 deletions
diff --git a/intern/opensubdiv/internal/topology/topology_refiner_factory.cc b/intern/opensubdiv/internal/topology/topology_refiner_factory.cc index e0c5e18e504..9688bc9eb0f 100644 --- a/intern/opensubdiv/internal/topology/topology_refiner_factory.cc +++ b/intern/opensubdiv/internal/topology/topology_refiner_factory.cc @@ -130,21 +130,6 @@ inline bool TopologyRefinerFactory<TopologyRefinerData>::assignComponentTopology const bool full_topology_specified = converter->specifiesFullTopology(converter); - // Vertices of an edge. - // - // NOTE: Only specify for base mesh topology on our side. - // They will be provided to the topology refiner only if the full topology is - // specified. - if (converter->getNumEdges != nullptr) { - const int num_edges = converter->getNumEdges(converter); - for (int edge_index = 0; edge_index < num_edges; ++edge_index) { - int edge_vertices[2]; - converter->getEdgeVertices(converter, edge_index, edge_vertices); - - base_mesh_topology->setEdgeVertexIndices(edge_index, edge_vertices[0], edge_vertices[1]); - } - } - // Vertices of face. const int num_faces = converter->getNumFaces(converter); for (int face_index = 0; face_index < num_faces; ++face_index) { @@ -186,12 +171,8 @@ inline bool TopologyRefinerFactory<TopologyRefinerData>::assignComponentTopology const int num_edges = converter->getNumEdges(converter); for (int edge_index = 0; edge_index < num_edges; ++edge_index) { // Vertices this edge connects. - int v1, v2; - base_mesh_topology->getEdgeVertexIndices(edge_index, &v1, &v2); - IndexArray dst_edge_vertices = getBaseEdgeVertices(refiner, edge_index); - dst_edge_vertices[0] = v1; - dst_edge_vertices[1] = v2; + converter->getEdgeVertices(converter, edge_index, &dst_edge_vertices[0]); // Faces adjacent to this edge. IndexArray dst_edge_faces = getBaseEdgeFaces(refiner, edge_index); @@ -224,20 +205,21 @@ inline bool TopologyRefinerFactory<TopologyRefinerData>::assignComponentTags( const int num_edges = converter->getNumEdges(converter); for (int edge_index = 0; edge_index < num_edges; ++edge_index) { const float sharpness = converter->getEdgeSharpness(converter, edge_index); - base_mesh_topology->setEdgeSharpness(edge_index, sharpness); - if (sharpness < 1e-6f) { continue; } + int edge_vertices[2]; + converter->getEdgeVertices(converter, edge_index, edge_vertices); + base_mesh_topology->setEdgeVertexIndices(edge_index, edge_vertices[0], edge_vertices[1]); + base_mesh_topology->setEdgeSharpness(edge_index, sharpness); + if (full_topology_specified) { setBaseEdgeSharpness(refiner, edge_index, sharpness); } else { // TODO(sergey): Should be a faster way to find reconstructed edge to // specify sharpness for (assuming, findBaseEdge has linear complexity). - int edge_vertices[2]; - converter->getEdgeVertices(converter, edge_index, edge_vertices); const int base_edge_index = findBaseEdge(refiner, edge_vertices[0], edge_vertices[1]); if (base_edge_index == OpenSubdiv::Far::INDEX_INVALID) { printf("OpenSubdiv Error: failed to find reconstructed edge\n"); |