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>

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to