[Bf-blender-cvs] [138e33b] opensubdiv-modifier: OpenSubdiv: Expose subdivision scheme via C-API converter API

Sergey Sharybin noreply at git.blender.org
Thu Jul 16 12:56:02 CEST 2015


Commit: 138e33b5fd44c695dbe0c3b58e44fc49416e28d9
Author: Sergey Sharybin
Date:   Wed Jul 15 16:43:40 2015 +0200
Branches: opensubdiv-modifier
https://developer.blender.org/rB138e33b5fd44c695dbe0c3b58e44fc49416e28d9

OpenSubdiv: Expose subdivision scheme via C-API converter API

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

M	intern/opensubdiv/opensubdiv_converter.cc
M	intern/opensubdiv/opensubdiv_converter_capi.h
M	source/blender/blenkernel/intern/CCGSubSurf_inline.h
M	source/blender/blenkernel/intern/CCGSubSurf_opensubdiv.c
M	source/blender/blenkernel/intern/CCGSubSurf_util.c

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

diff --git a/intern/opensubdiv/opensubdiv_converter.cc b/intern/opensubdiv/opensubdiv_converter.cc
index 03ce85f..fec9ed1 100644
--- a/intern/opensubdiv/opensubdiv_converter.cc
+++ b/intern/opensubdiv/opensubdiv_converter.cc
@@ -186,12 +186,30 @@ inline void TopologyRefinerFactory<OpenSubdiv_Converter>::reportInvalidTopology(
 }  /* namespace OPENSUBDIV_VERSION */
 }  /* namespace OpenSubdiv */
 
+namespace {
+
+OpenSubdiv::Sdc::SchemeType get_capi_scheme_type(OpenSubdiv_SchemeType type)
+{
+	switch(type) {
+		case OSD_SCHEME_BILINEAR:
+			return OpenSubdiv::Sdc::SCHEME_BILINEAR;
+		case OSD_SCHEME_CATMARK:
+			return OpenSubdiv::Sdc::SCHEME_CATMARK;
+		case OSD_SCHEME_LOOP:
+			return OpenSubdiv::Sdc::SCHEME_LOOP;
+	}
+	assert(!"Unknown sceme type passed via C-API");
+	return OpenSubdiv::Sdc::SCHEME_CATMARK;
+}
+
+}  /* namespace */
 
 struct OpenSubdiv_TopologyRefinerDescr *openSubdiv_createTopologyRefinerDescr(
         OpenSubdiv_Converter *converter)
 {
 	using OpenSubdiv::Far::TopologyRefinerFactory;
-	OpenSubdiv::Sdc::SchemeType scheme_type = OpenSubdiv::Sdc::SCHEME_CATMARK;
+	OpenSubdiv::Sdc::SchemeType scheme_type =
+	        get_capi_scheme_type(converter->get_type(converter));
 	OpenSubdiv::Sdc::Options options;
 	options.SetVtxBoundaryInterpolation(OpenSubdiv::Sdc::Options::VTX_BOUNDARY_EDGE_ONLY);
 	options.SetFVarLinearInterpolation(OpenSubdiv::Sdc::Options::FVAR_LINEAR_ALL);
diff --git a/intern/opensubdiv/opensubdiv_converter_capi.h b/intern/opensubdiv/opensubdiv_converter_capi.h
index cff1fff..d005b2c 100644
--- a/intern/opensubdiv/opensubdiv_converter_capi.h
+++ b/intern/opensubdiv/opensubdiv_converter_capi.h
@@ -35,11 +35,18 @@ typedef struct OpenSubdiv_TopologyRefinerDescr OpenSubdiv_TopologyRefinerDescr;
 
 typedef struct OpenSubdiv_Converter OpenSubdiv_Converter;
 
+typedef enum OpenSubdiv_SchemeType {
+	OSD_SCHEME_BILINEAR,
+	OSD_SCHEME_CATMARK,
+	OSD_SCHEME_LOOP,
+} OpenSubdiv_SchemeType;
+
 typedef struct OpenSubdiv_Converter {
 	/* TODO(sergey): Needs to be implemented. */
-	/* OpenSubdiv::Sdc::SchemeType get_type() const; */
 	/* OpenSubdiv::Sdc::Options get_options() const; */
 
+	OpenSubdiv_SchemeType (*get_type)(const OpenSubdiv_Converter *converter);
+
 	int (*get_num_faces)(const OpenSubdiv_Converter *converter);
 	int (*get_num_edges)(const OpenSubdiv_Converter *converter);
 	int (*get_num_verts)(const OpenSubdiv_Converter *converter);
diff --git a/source/blender/blenkernel/intern/CCGSubSurf_inline.h b/source/blender/blenkernel/intern/CCGSubSurf_inline.h
index 9af2b63..183578c 100644
--- a/source/blender/blenkernel/intern/CCGSubSurf_inline.h
+++ b/source/blender/blenkernel/intern/CCGSubSurf_inline.h
@@ -169,7 +169,7 @@ BLI_INLINE void *ccg_face_getIFCoEdge(CCGFace *f, CCGEdge *e, int f_ed_idx, int
 	int spacing = ccg_spacing(levels, lvl);
 	int x, y, cx, cy;
 
-	BLI_assert(f_ed_idx == _face_getEdgeIndex(f, e));
+	BLI_assert(f_ed_idx == ccg_face_getEdgeIndex(f, e));
 
 	eX = eX * spacing;
 	eY = eY * spacing;
diff --git a/source/blender/blenkernel/intern/CCGSubSurf_opensubdiv.c b/source/blender/blenkernel/intern/CCGSubSurf_opensubdiv.c
index c85b241..47b01c0 100644
--- a/source/blender/blenkernel/intern/CCGSubSurf_opensubdiv.c
+++ b/source/blender/blenkernel/intern/CCGSubSurf_opensubdiv.c
@@ -44,6 +44,12 @@
 
 #define OSD_LOG if (false) printf
 
+static OpenSubdiv_SchemeType conv_dm_get_type(
+        const OpenSubdiv_Converter *UNUSED(converter))
+{
+	return OSD_SCHEME_CATMARK;
+}
+
 /* TODO(sergey): Move converters API to own file for clearity of code. */
 static int conv_dm_get_num_faces(const OpenSubdiv_Converter *converter)
 {
@@ -229,6 +235,8 @@ static void converter_setup_from_derivedmesh(
         DerivedMesh *dm,
         OpenSubdiv_Converter *converter)
 {
+	converter->get_type = conv_dm_get_type;
+
 	converter->get_num_faces = conv_dm_get_num_faces;
 	converter->get_num_edges = conv_dm_get_num_edges;
 	converter->get_num_verts = conv_dm_get_num_verts;
diff --git a/source/blender/blenkernel/intern/CCGSubSurf_util.c b/source/blender/blenkernel/intern/CCGSubSurf_util.c
index 28f6c43..913da23 100644
--- a/source/blender/blenkernel/intern/CCGSubSurf_util.c
+++ b/source/blender/blenkernel/intern/CCGSubSurf_util.c
@@ -22,6 +22,7 @@
  *  \ingroup bke
  */
 
+#include <stdlib.h>
 #include <string.h>
 #include <math.h>




More information about the Bf-blender-cvs mailing list