[Bf-blender-cvs] [1239462] opensubdiv-modifier: OpenSubdiv: De-duplicate topology refiner creation
Sergey Sharybin
noreply at git.blender.org
Sat Jul 11 20:02:05 CEST 2015
Commit: 1239462dea19b15d45239cd4e43854d1817db382
Author: Sergey Sharybin
Date: Fri Jul 10 11:50:01 2015 +0200
Branches: opensubdiv-modifier
https://developer.blender.org/rB1239462dea19b15d45239cd4e43854d1817db382
OpenSubdiv: De-duplicate topology refiner creation
===================================================================
M intern/opensubdiv/opensubdiv_capi.cc
M intern/opensubdiv/opensubdiv_converter.cc
M intern/opensubdiv/opensubdiv_converter.h
M intern/opensubdiv/opensubdiv_evaluator_capi.cc
===================================================================
diff --git a/intern/opensubdiv/opensubdiv_capi.cc b/intern/opensubdiv/opensubdiv_capi.cc
index b7d3b23..bfefd27 100644
--- a/intern/opensubdiv/opensubdiv_capi.cc
+++ b/intern/opensubdiv/opensubdiv_capi.cc
@@ -219,7 +219,6 @@ struct OpenSubdiv_GLMesh *openSubdiv_createOsdGLMeshFromEvaluator(
int /*scheme*/,
int /*subdivide_uvs*/)
{
- using OpenSubdiv::Far::TopologyRefinerFactory;
MeshBitset bits;
/* TODO(sergey): Adaptive subdivisions are not currently
* possible because of the lack of tessellation shader.
@@ -236,15 +235,7 @@ struct OpenSubdiv_GLMesh *openSubdiv_createOsdGLMeshFromEvaluator(
const int num_varying_elements = 0;
GLMeshInterface *mesh = NULL;
-
- OsdBlenderConverter conv(dm);
- TopologyRefinerFactory<OsdBlenderConverter>::Options topology_options(conv.get_type(),
- conv.get_options());
-#ifdef OPENSUBDIV_VALIDATE_TOPOLOGY
- topology_options.validateFullTopology = true;
-#endif
- OpenSubdiv::Far::TopologyRefiner *refiner =
- TopologyRefinerFactory<OsdBlenderConverter>::Create(conv, topology_options);
+ OpenSubdiv::Far::TopologyRefiner *refiner = openSubdiv_topologyRefinerFromDM(dm);
mesh = new OsdCpuMesh(refiner,
num_vertex_elements,
diff --git a/intern/opensubdiv/opensubdiv_converter.cc b/intern/opensubdiv/opensubdiv_converter.cc
index 664867e..b9d6760 100644
--- a/intern/opensubdiv/opensubdiv_converter.cc
+++ b/intern/opensubdiv/opensubdiv_converter.cc
@@ -25,6 +25,10 @@
#include "opensubdiv_converter.h"
+#include <opensubdiv/far/topologyRefinerFactory.h>
+
+#include "opensubdiv_intern.h"
+
extern "C" {
#include "BKE_DerivedMesh.h"
#include "DNA_meshdata_types.h"
@@ -207,3 +211,15 @@ void OsdBlenderConverter::get_vert_faces(int vert, int *vert_faces) const
}
}
}
+
+OpenSubdiv::Far::TopologyRefiner *openSubdiv_topologyRefinerFromDM(DerivedMesh *dm)
+{
+ using OpenSubdiv::Far::TopologyRefinerFactory;
+ OsdBlenderConverter conv(dm);
+ TopologyRefinerFactory<OsdBlenderConverter>::Options
+ topology_options(conv.get_type(), conv.get_options());
+#ifdef OPENSUBDIV_VALIDATE_TOPOLOGY
+ topology_options.validateFullTopology = true;
+#endif
+ return TopologyRefinerFactory<OsdBlenderConverter>::Create(conv, topology_options);
+}
diff --git a/intern/opensubdiv/opensubdiv_converter.h b/intern/opensubdiv/opensubdiv_converter.h
index d10062f..8b76b57 100644
--- a/intern/opensubdiv/opensubdiv_converter.h
+++ b/intern/opensubdiv/opensubdiv_converter.h
@@ -281,4 +281,6 @@ inline bool TopologyRefinerFactory<OsdBlenderConverter>::assignComponentTags(
} /* namespace OPENSUBDIV_VERSION */
} /* namespace OpenSubdiv */
+OpenSubdiv::Far::TopologyRefiner *openSubdiv_topologyRefinerFromDM(DerivedMesh *dm);
+
#endif /* __OPENSUBDIV_CONVERTER_H__ */
diff --git a/intern/opensubdiv/opensubdiv_evaluator_capi.cc b/intern/opensubdiv/opensubdiv_evaluator_capi.cc
index e791592..4c3af8c 100644
--- a/intern/opensubdiv/opensubdiv_evaluator_capi.cc
+++ b/intern/opensubdiv/opensubdiv_evaluator_capi.cc
@@ -488,15 +488,7 @@ OpenSubdiv_EvaluatorDescr *openSubdiv_createEvaluatorDescr(DerivedMesh *dm,
OsdBlenderConverter conv(dm);
/* TODO(sergey): Look into re-using refiner with GLMesh. */
- TopologyRefinerFactory<OsdBlenderConverter>::Options topology_options(conv.get_type(),
- conv.get_options());
-#ifdef OPENSUBDIV_VALIDATE_TOPOLOGY
- topology_options.validateFullTopology = true;
-#endif
- TopologyRefiner *refiner =
- TopologyRefinerFactory<OsdBlenderConverter>::Create(conv,
- topology_options);
-
+ TopologyRefiner *refiner = openSubdiv_topologyRefinerFromDM(dm);
if(refiner == NULL) {
/* Happens on bad topology. */
return NULL;
More information about the Bf-blender-cvs
mailing list