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:
Diffstat (limited to 'intern/opensubdiv/opensubdiv_converter.cc')
-rw-r--r--intern/opensubdiv/opensubdiv_converter.cc48
1 files changed, 34 insertions, 14 deletions
diff --git a/intern/opensubdiv/opensubdiv_converter.cc b/intern/opensubdiv/opensubdiv_converter.cc
index ea41a56768f..fec15b118ae 100644
--- a/intern/opensubdiv/opensubdiv_converter.cc
+++ b/intern/opensubdiv/opensubdiv_converter.cc
@@ -542,7 +542,7 @@ namespace {
OpenSubdiv::Sdc::SchemeType get_capi_scheme_type(OpenSubdiv_SchemeType type)
{
- switch(type) {
+ switch (type) {
case OSD_SCHEME_BILINEAR:
return OpenSubdiv::Sdc::SCHEME_BILINEAR;
case OSD_SCHEME_CATMARK:
@@ -550,10 +550,29 @@ OpenSubdiv::Sdc::SchemeType get_capi_scheme_type(OpenSubdiv_SchemeType type)
case OSD_SCHEME_LOOP:
return OpenSubdiv::Sdc::SCHEME_LOOP;
}
- assert(!"Unknown sceme type passed via C-API");
+ assert(!"Unknown scheme type passed via C-API");
return OpenSubdiv::Sdc::SCHEME_CATMARK;
}
+OpenSubdiv::Sdc::Options::FVarLinearInterpolation
+get_capi_fvar_linear_interpolation(
+ OpenSubdiv_FVarLinearInterpolation linear_interpolation)
+{
+ typedef OpenSubdiv::Sdc::Options Options;
+ switch (linear_interpolation) {
+ case OSD_FVAR_LINEAR_INTERPOLATION_NONE:
+ return Options::FVAR_LINEAR_NONE;
+ case OSD_FVAR_LINEAR_INTERPOLATION_CORNERS_ONLY:
+ return Options::FVAR_LINEAR_CORNERS_ONLY;
+ case OSD_FVAR_LINEAR_INTERPOLATION_BOUNDARIES:
+ return Options::FVAR_LINEAR_BOUNDARIES;
+ case OSD_FVAR_LINEAR_INTERPOLATION_ALL:
+ return Options::FVAR_LINEAR_ALL;
+ }
+ assert(!"Unknown fvar linear interpolation passed via C-API");
+ return Options::FVAR_LINEAR_NONE;
+}
+
} /* namespace */
struct OpenSubdiv_TopologyRefinerDescr *openSubdiv_createTopologyRefinerDescr(
@@ -562,17 +581,15 @@ struct OpenSubdiv_TopologyRefinerDescr *openSubdiv_createTopologyRefinerDescr(
typedef OpenSubdiv::Sdc::Options Options;
using OpenSubdiv::Far::TopologyRefinerFactory;
- OpenSubdiv::Sdc::SchemeType scheme_type =
- get_capi_scheme_type(converter->get_type(converter));
+ const OpenSubdiv::Sdc::SchemeType scheme_type =
+ get_capi_scheme_type(converter->get_scheme_type(converter));
+ const Options::FVarLinearInterpolation linear_interpolation =
+ get_capi_fvar_linear_interpolation(
+ converter->get_fvar_linear_interpolation(converter));
Options options;
options.SetVtxBoundaryInterpolation(Options::VTX_BOUNDARY_EDGE_ONLY);
options.SetCreasingMethod(Options::CREASE_UNIFORM);
- if (converter->get_subdiv_uvs(converter)) {
- options.SetFVarLinearInterpolation(Options::FVAR_LINEAR_CORNERS_ONLY);
- }
- else {
- options.SetFVarLinearInterpolation(Options::FVAR_LINEAR_ALL);
- }
+ options.SetFVarLinearInterpolation(linear_interpolation);
TopologyRefinerFactory<TopologyRefinerData>::Options
topology_options(scheme_type, options);
@@ -663,14 +680,17 @@ int openSubdiv_topologyRefnerCompareConverter(
const int num_faces = base_level.GetNumFaces();
/* Quick preliminary check. */
OpenSubdiv::Sdc::SchemeType scheme_type =
- get_capi_scheme_type(converter->get_type(converter));
+ get_capi_scheme_type(converter->get_scheme_type(converter));
if (scheme_type != refiner->GetSchemeType()) {
return false;
}
const Options options = refiner->GetSchemeOptions();
- Options::FVarLinearInterpolation interp = options.GetFVarLinearInterpolation();
- const bool subdiv_uvs = (interp != Options::FVAR_LINEAR_ALL);
- if (converter->get_subdiv_uvs(converter) != subdiv_uvs) {
+ const Options::FVarLinearInterpolation interp =
+ options.GetFVarLinearInterpolation();
+ const Options::FVarLinearInterpolation new_interp =
+ get_capi_fvar_linear_interpolation(
+ converter->get_fvar_linear_interpolation(converter));
+ if (new_interp != interp) {
return false;
}
if (converter->get_num_verts(converter) != num_verts ||