Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2018-10-31 19:46:22 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2018-10-31 19:47:40 +0300
commita2a8e7121081404e35d9aa4769b17ebf23f83f11 (patch)
treedcb80b6466cba21f905740abadd6383aa07f0a16 /intern/opensubdiv
parent9c328502bb37ab082e4205be4b61fe9d4a43aa1b (diff)
OpenSubdiv: API, expose vertex boundary interpolation option
Only affects internal API, bout could be exposed as an option for the compatibility reasons with other software. Is a part of some ongoing development of multires, but might or might not be used.
Diffstat (limited to 'intern/opensubdiv')
-rw-r--r--intern/opensubdiv/internal/opensubdiv_converter_factory.cc24
-rw-r--r--intern/opensubdiv/opensubdiv_capi_type.h9
-rw-r--r--intern/opensubdiv/opensubdiv_converter_capi.h2
3 files changed, 34 insertions, 1 deletions
diff --git a/intern/opensubdiv/internal/opensubdiv_converter_factory.cc b/intern/opensubdiv/internal/opensubdiv_converter_factory.cc
index 901a421314a..4f3fb1462f3 100644
--- a/intern/opensubdiv/internal/opensubdiv_converter_factory.cc
+++ b/intern/opensubdiv/internal/opensubdiv_converter_factory.cc
@@ -441,6 +441,26 @@ inline void TopologyRefinerFactory<TopologyRefinerData>::reportInvalidTopology(
namespace opensubdiv_capi {
+namespace {
+
+OpenSubdiv::Sdc::Options::VtxBoundaryInterpolation
+getVtxBoundaryInterpolationFromCAPI(
+ OpenSubdiv_VtxBoundaryInterpolation boundary_interpolation) {
+ using OpenSubdiv::Sdc::Options;
+ switch (boundary_interpolation) {
+ case OSD_VTX_BOUNDARY_NONE:
+ return Options::VTX_BOUNDARY_NONE;
+ case OSD_VTX_BOUNDARY_EDGE_ONLY:
+ return Options::VTX_BOUNDARY_EDGE_ONLY;
+ case OSD_VTX_BOUNDARY_EDGE_AND_CORNER:
+ return Options::VTX_BOUNDARY_EDGE_AND_CORNER;
+ }
+ assert(!"Unknown veretx boundary interpolation.");
+ return Options::VTX_BOUNDARY_EDGE_ONLY;
+}
+
+} // namespace
+
OpenSubdiv::Far::TopologyRefiner* createOSDTopologyRefinerFromConverter(
OpenSubdiv_Converter* converter) {
using OpenSubdiv::Sdc::Options;
@@ -451,7 +471,9 @@ OpenSubdiv::Far::TopologyRefiner* createOSDTopologyRefinerFromConverter(
getFVarLinearInterpolationFromCAPI(
converter->getFVarLinearInterpolation(converter));
Options options;
- options.SetVtxBoundaryInterpolation(Options::VTX_BOUNDARY_EDGE_ONLY);
+ options.SetVtxBoundaryInterpolation(
+ getVtxBoundaryInterpolationFromCAPI(
+ converter->getVtxBoundaryInterpolation(converter)));
options.SetCreasingMethod(Options::CREASE_UNIFORM);
options.SetFVarLinearInterpolation(linear_interpolation);
diff --git a/intern/opensubdiv/opensubdiv_capi_type.h b/intern/opensubdiv/opensubdiv_capi_type.h
index b326e53e168..57f62fd9888 100644
--- a/intern/opensubdiv/opensubdiv_capi_type.h
+++ b/intern/opensubdiv/opensubdiv_capi_type.h
@@ -40,6 +40,15 @@ typedef enum OpenSubdiv_SchemeType {
OSD_SCHEME_LOOP,
} OpenSubdiv_SchemeType;
+typedef enum OpenSubdiv_VtxBoundaryInterpolation {
+ // Do not interpolate boundaries
+ OSD_VTX_BOUNDARY_NONE,
+ // Sharpen edges.
+ OSD_VTX_BOUNDARY_EDGE_ONLY,
+ // sharpen edges and corners,
+ OSD_VTX_BOUNDARY_EDGE_AND_CORNER,
+} OpenSubdiv_VtxBoundaryInterpolation;
+
typedef enum OpenSubdiv_FVarLinearInterpolation {
OSD_FVAR_LINEAR_INTERPOLATION_NONE,
OSD_FVAR_LINEAR_INTERPOLATION_CORNERS_ONLY,
diff --git a/intern/opensubdiv/opensubdiv_converter_capi.h b/intern/opensubdiv/opensubdiv_converter_capi.h
index 9f559ee208b..389e16e0f3f 100644
--- a/intern/opensubdiv/opensubdiv_converter_capi.h
+++ b/intern/opensubdiv/opensubdiv_converter_capi.h
@@ -31,6 +31,8 @@ typedef struct OpenSubdiv_Converter {
OpenSubdiv_SchemeType (*getSchemeType)(
const struct OpenSubdiv_Converter* converter);
+ OpenSubdiv_VtxBoundaryInterpolation (*getVtxBoundaryInterpolation)(
+ const struct OpenSubdiv_Converter* converter);
OpenSubdiv_FVarLinearInterpolation (*getFVarLinearInterpolation)(
const struct OpenSubdiv_Converter* converter);