[Bf-blender-cvs] [73817d35a6c] opensubdiv_compare: OpenSubdiv: Add explicit storage for mesh topology

Sergey Sharybin noreply at git.blender.org
Tue May 26 11:13:27 CEST 2020


Commit: 73817d35a6c6a15f2cb76b025cae3db4c4aca191
Author: Sergey Sharybin
Date:   Tue May 19 11:39:07 2020 +0200
Branches: opensubdiv_compare
https://developer.blender.org/rB73817d35a6c6a15f2cb76b025cae3db4c4aca191

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