[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