diff options
Diffstat (limited to 'intern/opensubdiv/internal/topology/mesh_topology.cc')
-rw-r--r-- | intern/opensubdiv/internal/topology/mesh_topology.cc | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/intern/opensubdiv/internal/topology/mesh_topology.cc b/intern/opensubdiv/internal/topology/mesh_topology.cc index 3d8535ee2f1..9197a5c1b54 100644 --- a/intern/opensubdiv/internal/topology/mesh_topology.cc +++ b/intern/opensubdiv/internal/topology/mesh_topology.cc @@ -80,8 +80,6 @@ void MeshTopology::ensureVertexTagsSize(int num_vertices) void MeshTopology::setNumEdges(int num_edges) { num_edges_ = num_edges; - - edges_.resize(num_edges_); } int MeshTopology::getNumEdges() const @@ -112,6 +110,12 @@ void MeshTopology::getEdgeVertexIndices(int edge_index, int *v1, int *v2) const assert(edge_index >= 0); assert(edge_index < getNumEdges()); + if (edge_index >= edges_.size()) { + *v1 = -1; + *v1 = -1; + return; + } + const Edge &edge = edges_[edge_index]; *v1 = edge.v1; *v2 = edge.v2; @@ -122,6 +126,10 @@ bool MeshTopology::isEdgeEqual(int edge_index, int expected_v1, int expected_v2) assert(edge_index >= 0); assert(edge_index < getNumEdges()); + if (edge_index >= edges_.size()) { + return false; + } + const Edge &edge = edges_[edge_index]; return edge.v1 == expected_v1 && edge.v2 == expected_v2; } @@ -155,8 +163,8 @@ float MeshTopology::getEdgeSharpness(int edge_index) const void MeshTopology::ensureNumEdgesAtLeast(int num_edges) { - if (getNumEdges() < num_edges) { - setNumEdges(num_edges); + if (edges_.size() < num_edges) { + edges_.resize(num_edges); } } |