[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