[Bf-blender-cvs] [717d968fb9f] master: OpenSubdiv: Add explicit storage for mesh topology
Sergey Sharybin
noreply at git.blender.org
Wed May 27 12:22:28 CEST 2020
Commit: 717d968fb9fd2daa5326a8e2322c3accee335ce3
Author: Sergey Sharybin
Date: Tue May 19 11:39:07 2020 +0200
Branches: master
https://developer.blender.org/rB717d968fb9fd2daa5326a8e2322c3accee335ce3
OpenSubdiv: Add explicit storage for mesh topology
The idea is to use this explicit storage for topology comparison rather
than using base level. While this will have memory overhead it allows
to simplify comparison of such things as:
- Vertex sharpness (where base level from topology refiner will have it
refined, meaning it will be different from what application requested
for non-manifold and corner vertices).
- It will allow to simplify face-vertices comparison, where currently
O(N^2) algorithm is used due to possible difference in face winding.
- It will also allow to avoid comparison-time allocation of edge map.
Currently no functional changes, just preparing for development which
will happen next.
===================================================================
M intern/opensubdiv/CMakeLists.txt
A intern/opensubdiv/internal/topology/mesh_topology.cc
A intern/opensubdiv/internal/topology/mesh_topology.h
===================================================================
diff --git a/intern/opensubdiv/CMakeLists.txt b/intern/opensubdiv/CMakeLists.txt
index 4387daf40e4..70c5453d3bd 100644
--- a/intern/opensubdiv/CMakeLists.txt
+++ b/intern/opensubdiv/CMakeLists.txt
@@ -78,6 +78,8 @@ if(WITH_OPENSUBDIV)
internal/evaluator/evaluator_impl.h
# Topology.
+ internal/topology/mesh_topology.cc
+ internal/topology/mesh_topology.h
internal/topology/topology_refiner_capi.cc
internal/topology/topology_refiner_factory.cc
internal/topology/topology_refiner_impl.cc
diff --git a/intern/opensubdiv/internal/topology/mesh_topology.cc b/intern/opensubdiv/internal/topology/mesh_topology.cc
new file mode 100644
index 00000000000..f8832d61cd0
--- /dev/null
+++ b/intern/opensubdiv/internal/topology/mesh_topology.cc
@@ -0,0 +1,52 @@
+// Copyright 2020 Blender Foundation. All rights reserved.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software Foundation,
+// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+//
+// Author: Sergey Sharybin
+
+#include "internal/topology/mesh_topology.h"
+
+#include <cassert>
+
+namespace blender {
+namespace opensubdiv {
+
+MeshTopology::MeshTopology()
+{
+}
+
+MeshTopology::~MeshTopology()
+{
+}
+
+void MeshTopology::setNumVertices(int num_vertices)
+{
+ vertices.resize(num_vertices);
+}
+int MeshTopology::getNumVertices() const
+{
+ return vertices.size();
+}
+
+void MeshTopology::setVertexSharpness(int vertex_index, float sharpness)
+{
+ assert(vertex_index >= 0);
+ assert(vertex_index < vertices.size());
+
+ vertices[vertex_index].sharpness = sharpness;
+}
+
+} // namespace opensubdiv
+} // namespace blender
diff --git a/intern/opensubdiv/internal/topology/mesh_topology.h b/intern/opensubdiv/internal/topology/mesh_topology.h
new file mode 100644
index 00000000000..9893c70dac8
--- /dev/null
+++ b/intern/opensubdiv/internal/topology/mesh_topology.h
@@ -0,0 +1,61 @@
+// Copyright 2020 Blender Foundation. All rights reserved.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software Foundation,
+// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+//
+// Author: Sergey Sharybin
+
+#ifndef OPENSUBDIV_MESH_TOPOLOGY_H_
+#define OPENSUBDIV_MESH_TOPOLOGY_H_
+
+#include "internal/base/memory.h"
+#include "internal/base/type.h"
+
+struct OpenSubdiv_Converter;
+
+namespace blender {
+namespace opensubdiv {
+
+class VertexTopology {
+ public:
+ float sharpness = 0.0f;
+};
+
+// Simplified representation of mesh topology.
+// Only includes parts of actual mesh topology which is needed to perform
+// comparison between Application side and OpenSubddiv side.
+class MeshTopology {
+ public:
+ MeshTopology();
+ MeshTopology(const MeshTopology &other) = default;
+ MeshTopology(MeshTopology &&other) noexcept = default;
+ ~MeshTopology();
+
+ MeshTopology &operator=(const MeshTopology &other) = default;
+ MeshTopology &operator=(MeshTopology &&other) = default;
+
+ void setNumVertices(int num_vertices);
+ int getNumVertices() const;
+
+ void setVertexSharpness(int vertex_index, float sharpness);
+
+ vector<VertexTopology> vertices;
+
+ MEM_CXX_CLASS_ALLOC_FUNCS("MeshTopology");
+};
+
+} // namespace opensubdiv
+} // namespace blender
+
+#endif // OPENSUBDIV_MESH_TOPOLOGY_H_
More information about the Bf-blender-cvs
mailing list