Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'intern/opensubdiv/internal/topology/topology_refiner_factory.cc')
-rw-r--r--intern/opensubdiv/internal/topology/topology_refiner_factory.cc30
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");