[Bf-blender-cvs] [dd05cf1d5c4] opensubdiv_compare: OpenSubdiv: Refactor, move topology refiner to own folder

Sergey Sharybin noreply at git.blender.org
Mon May 25 15:46:19 CEST 2020


Commit: dd05cf1d5c4cac8600d8badfd5a693ae30093e1c
Author: Sergey Sharybin
Date:   Mon May 18 18:47:38 2020 +0200
Branches: opensubdiv_compare
https://developer.blender.org/rBdd05cf1d5c4cac8600d8badfd5a693ae30093e1c

OpenSubdiv: Refactor, move topology refiner to own folder

In the future factory will also be moved there.

===================================================================

M	intern/opensubdiv/CMakeLists.txt
M	intern/opensubdiv/internal/opensubdiv_evaluator_internal.cc
R097	intern/opensubdiv/internal/opensubdiv_topology_refiner.cc	intern/opensubdiv/internal/topology/topology_refiner_capi.cc
R076	intern/opensubdiv/internal/opensubdiv_topology_refiner_internal.cc	intern/opensubdiv/internal/topology/topology_refiner_impl.cc
R077	intern/opensubdiv/internal/opensubdiv_topology_refiner_internal.h	intern/opensubdiv/internal/topology/topology_refiner_impl.h
M	intern/opensubdiv/opensubdiv_topology_refiner_capi.h

===================================================================

diff --git a/intern/opensubdiv/CMakeLists.txt b/intern/opensubdiv/CMakeLists.txt
index 3226d9e8931..7c73b2ad555 100644
--- a/intern/opensubdiv/CMakeLists.txt
+++ b/intern/opensubdiv/CMakeLists.txt
@@ -50,6 +50,7 @@ if(WITH_OPENSUBDIV)
   )
 
   list(APPEND SRC
+    # Device.
     internal/device/device_context_cuda.cc
     internal/device/device_context_cuda.h
     internal/device/device_context_glsl_compute.cc
@@ -61,13 +62,16 @@ if(WITH_OPENSUBDIV)
     internal/device/device_context_openmp.cc
     internal/device/device_context_openmp.h
 
+    # Topology.
+    internal/topology/topology_refiner_capi.cc
+    internal/topology/topology_refiner_impl.cc
+    internal/topology/topology_refiner_impl.h
+
     internal/opensubdiv.cc
     internal/opensubdiv_converter_factory.cc
     internal/opensubdiv_converter_internal.cc
     internal/opensubdiv_evaluator.cc
     internal/opensubdiv_evaluator_internal.cc
-    internal/opensubdiv_topology_refiner.cc
-    internal/opensubdiv_topology_refiner_internal.cc
     internal/opensubdiv_util.cc
 
     internal/opensubdiv_converter_factory.h
@@ -75,7 +79,6 @@ if(WITH_OPENSUBDIV)
     internal/opensubdiv_edge_map.h
     internal/opensubdiv_evaluator_internal.h
     internal/opensubdiv_internal.h
-    internal/opensubdiv_topology_refiner_internal.h
     internal/opensubdiv_util.h
   )
 
diff --git a/intern/opensubdiv/internal/opensubdiv_evaluator_internal.cc b/intern/opensubdiv/internal/opensubdiv_evaluator_internal.cc
index 5279752ea4e..ea345654484 100644
--- a/intern/opensubdiv/internal/opensubdiv_evaluator_internal.cc
+++ b/intern/opensubdiv/internal/opensubdiv_evaluator_internal.cc
@@ -37,8 +37,8 @@
 
 #include "MEM_guardedalloc.h"
 
-#include "internal/opensubdiv_topology_refiner_internal.h"
 #include "internal/opensubdiv_util.h"
+#include "internal/topology/topology_refiner_impl.h"
 #include "opensubdiv_topology_refiner_capi.h"
 
 using OpenSubdiv::Far::PatchMap;
@@ -751,7 +751,7 @@ OpenSubdiv_EvaluatorInternal *openSubdiv_createEvaluatorInternal(
     OpenSubdiv_TopologyRefiner *topology_refiner)
 {
   using blender::opensubdiv::vector;
-  TopologyRefiner *refiner = topology_refiner->internal->osd_topology_refiner;
+  TopologyRefiner *refiner = topology_refiner->impl->osd_topology_refiner;
   if (refiner == NULL) {
     // Happens on bad topology.
     return NULL;
diff --git a/intern/opensubdiv/internal/opensubdiv_topology_refiner.cc b/intern/opensubdiv/internal/topology/topology_refiner_capi.cc
similarity index 97%
rename from intern/opensubdiv/internal/opensubdiv_topology_refiner.cc
rename to intern/opensubdiv/internal/topology/topology_refiner_capi.cc
index 6e2dae4533a..ff58ac68866 100644
--- a/intern/opensubdiv/internal/opensubdiv_topology_refiner.cc
+++ b/intern/opensubdiv/internal/topology/topology_refiner_capi.cc
@@ -18,15 +18,13 @@
 
 #include "opensubdiv_topology_refiner_capi.h"
 
-#include <vector>
-
 #include "MEM_guardedalloc.h"
 #include "internal/opensubdiv_converter_factory.h"
 #include "internal/opensubdiv_converter_internal.h"
 #include "internal/opensubdiv_edge_map.h"
 #include "internal/opensubdiv_internal.h"
-#include "internal/opensubdiv_topology_refiner_internal.h"
 #include "internal/opensubdiv_util.h"
+#include "internal/topology/topology_refiner_impl.h"
 
 using blender::opensubdiv::vector;
 
@@ -35,7 +33,7 @@ namespace {
 const OpenSubdiv::Far::TopologyRefiner *getOSDTopologyRefiner(
     const OpenSubdiv_TopologyRefiner *topology_refiner)
 {
-  return topology_refiner->internal->osd_topology_refiner;
+  return topology_refiner->impl->osd_topology_refiner;
 }
 
 const OpenSubdiv::Far::TopologyLevel *getOSDTopologyBaseLevel(
@@ -46,12 +44,12 @@ const OpenSubdiv::Far::TopologyLevel *getOSDTopologyBaseLevel(
 
 int getSubdivisionLevel(const OpenSubdiv_TopologyRefiner *topology_refiner)
 {
-  return topology_refiner->internal->settings.level;
+  return topology_refiner->impl->settings.level;
 }
 
 bool getIsAdaptive(const OpenSubdiv_TopologyRefiner *topology_refiner)
 {
-  return topology_refiner->internal->settings.is_adaptive;
+  return topology_refiner->impl->settings.is_adaptive;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -232,7 +230,7 @@ void assignFunctionPointers(OpenSubdiv_TopologyRefiner *topology_refiner)
 OpenSubdiv_TopologyRefiner *allocateTopologyRefiner()
 {
   OpenSubdiv_TopologyRefiner *topology_refiner = OBJECT_GUARDED_NEW(OpenSubdiv_TopologyRefiner);
-  topology_refiner->internal = OBJECT_GUARDED_NEW(OpenSubdiv_TopologyRefinerInternal);
+  topology_refiner->impl = OBJECT_GUARDED_NEW(OpenSubdiv_TopologyRefinerImpl);
   assignFunctionPointers(topology_refiner);
   return topology_refiner;
 }
@@ -249,16 +247,16 @@ OpenSubdiv_TopologyRefiner *openSubdiv_createTopologyRefinerFromConverter(
     return NULL;
   }
   OpenSubdiv_TopologyRefiner *topology_refiner = allocateTopologyRefiner();
-  topology_refiner->internal->osd_topology_refiner = osd_topology_refiner;
+  topology_refiner->impl->osd_topology_refiner = osd_topology_refiner;
   // Store setting which we want to keep track of and which can not be stored
   // in OpenSubdiv's descriptor yet.
-  topology_refiner->internal->settings = *settings;
+  topology_refiner->impl->settings = *settings;
   return topology_refiner;
 }
 
 void openSubdiv_deleteTopologyRefiner(OpenSubdiv_TopologyRefiner *topology_refiner)
 {
-  OBJECT_GUARDED_DELETE(topology_refiner->internal, OpenSubdiv_TopologyRefinerInternal);
+  OBJECT_GUARDED_DELETE(topology_refiner->impl, OpenSubdiv_TopologyRefinerImpl);
   OBJECT_GUARDED_DELETE(topology_refiner, OpenSubdiv_TopologyRefiner);
 }
 
diff --git a/intern/opensubdiv/internal/opensubdiv_topology_refiner_internal.cc b/intern/opensubdiv/internal/topology/topology_refiner_impl.cc
similarity index 76%
rename from intern/opensubdiv/internal/opensubdiv_topology_refiner_internal.cc
rename to intern/opensubdiv/internal/topology/topology_refiner_impl.cc
index f3054a17da2..7d2ae2a6304 100644
--- a/intern/opensubdiv/internal/opensubdiv_topology_refiner_internal.cc
+++ b/intern/opensubdiv/internal/topology/topology_refiner_impl.cc
@@ -16,14 +16,19 @@
 //
 // Author: Sergey Sharybin
 
-#include "internal/opensubdiv_topology_refiner_internal.h"
+#include "internal/topology/topology_refiner_impl.h"
 
-OpenSubdiv_TopologyRefinerInternal::OpenSubdiv_TopologyRefinerInternal()
-    : osd_topology_refiner(NULL)
+namespace blender {
+namespace opensubdiv {
+
+TopologyRefinerImpl::TopologyRefinerImpl() : osd_topology_refiner(nullptr)
 {
 }
 
-OpenSubdiv_TopologyRefinerInternal::~OpenSubdiv_TopologyRefinerInternal()
+TopologyRefinerImpl::~TopologyRefinerImpl()
 {
   delete osd_topology_refiner;
 }
+
+}  // namespace opensubdiv
+}  // namespace blender
diff --git a/intern/opensubdiv/internal/opensubdiv_topology_refiner_internal.h b/intern/opensubdiv/internal/topology/topology_refiner_impl.h
similarity index 77%
rename from intern/opensubdiv/internal/opensubdiv_topology_refiner_internal.h
rename to intern/opensubdiv/internal/topology/topology_refiner_impl.h
index b0f5d4079ef..507f3d0f869 100644
--- a/intern/opensubdiv/internal/opensubdiv_topology_refiner_internal.h
+++ b/intern/opensubdiv/internal/topology/topology_refiner_impl.h
@@ -16,8 +16,8 @@
 //
 // Author: Sergey Sharybin
 
-#ifndef OPENSUBDIV_TOPOLOGY_REFINER_INTERNAL_H_
-#define OPENSUBDIV_TOPOLOGY_REFINER_INTERNAL_H_
+#ifndef OPENSUBDIV_TOPOLOGY_REFINER_IMPL_H_
+#define OPENSUBDIV_TOPOLOGY_REFINER_IMPL_H_
 
 #ifdef _MSC_VER
 #  include <iso646.h>
@@ -27,10 +27,13 @@
 
 #include "opensubdiv_topology_refiner_capi.h"
 
-struct OpenSubdiv_TopologyRefinerInternal {
+namespace blender {
+namespace opensubdiv {
+
+class TopologyRefinerImpl {
  public:
-  OpenSubdiv_TopologyRefinerInternal();
-  ~OpenSubdiv_TopologyRefinerInternal();
+  TopologyRefinerImpl();
+  ~TopologyRefinerImpl();
 
   OpenSubdiv::Far::TopologyRefiner *osd_topology_refiner;
 
@@ -44,4 +47,10 @@ struct OpenSubdiv_TopologyRefinerInternal {
   OpenSubdiv_TopologyRefinerSettings settings;
 };
 
-#endif  // OPENSUBDIV_TOPOLOGY_REFINER_H_
+}  // namespace opensubdiv
+}  // namespace blender
+
+struct OpenSubdiv_TopologyRefinerImpl : public blender::opensubdiv::TopologyRefinerImpl {
+};
+
+#endif  // OPENSUBDIV_TOPOLOGY_REFINER_IMPL_H_
diff --git a/intern/opensubdiv/opensubdiv_topology_refiner_capi.h b/intern/opensubdiv/opensubdiv_topology_refiner_capi.h
index 38d722ab572..fe2f3f3ce2d 100644
--- a/intern/opensubdiv/opensubdiv_topology_refiner_capi.h
+++ b/intern/opensubdiv/opensubdiv_topology_refiner_capi.h
@@ -28,7 +28,7 @@ extern "C" {
 #endif
 
 struct OpenSubdiv_Converter;
-struct OpenSubdiv_TopologyRefinerInternal;
+struct OpenSubdiv_TopologyRefinerImpl;
 
 // Those settings don't really belong to OpenSubdiv's topology refiner, but
 // we are keeping track of them on our side of topology refiner. This is to
@@ -40,6 +40,10 @@ typedef struct OpenSubdiv_TopologyRefinerSettings {
   int level;
 } OpenSubdiv_TopologyRefinerSettings;
 
+// C-style wrapper around actual topology refiner.
+//
+// The only purpose is to allow C-only code to access C++ implementation of the
+// topology refiner.
 typedef struct OpenSubdiv_TopologyRefiner {
   // Query subdivision level the refiner is created for.
   int (*getSubdivisionLevel)(const struct OpenSubdiv_TopologyRefiner *topology_refiner);
@@ -125,11 +129,8 @@ typedef struct OpenSubdiv_TopologyRefiner {
   //////////////////////////////////////////////////////////////////////////////
   // Internal use.
 
-  // Internal storage for the use in this module only.
-  //
-  // Tease: Contains actual OpenSubdiv's refiner and (optionally) some other
-  // data and state needed for an internbal use.
-  struct OpenSubdiv_TopologyRefinerInternal *internal;
+  // Implementation of the topology refiner.
+  struct OpenSubdiv_TopologyRefinerImpl *impl;
 } OpenSubdiv_TopologyRefiner;
 
 // NOTE: Will return NULL in cases of bad topology.



More information about the Bf-blender-cvs mailing list