[Bf-blender-cvs] [0c0de344aab] temp-fracture-modifier-2.8: make usage of opensubdiv in subsurf and multires optional, allow switching to legacy mode
Martin Felke
noreply at git.blender.org
Sat Mar 2 19:40:21 CET 2019
Commit: 0c0de344aabd0fb2cfbe998d9b54ca2ac6a70120
Author: Martin Felke
Date: Fri Feb 22 12:15:52 2019 +0100
Branches: temp-fracture-modifier-2.8
https://developer.blender.org/rB0c0de344aabd0fb2cfbe998d9b54ca2ac6a70120
make usage of opensubdiv in subsurf and multires optional, allow switching to legacy mode
===================================================================
M release/scripts/startup/bl_ui/properties_data_modifier.py
M source/blender/makesdna/DNA_modifier_types.h
M source/blender/makesrna/intern/rna_modifier.c
M source/blender/modifiers/intern/MOD_multires.c
M source/blender/modifiers/intern/MOD_subsurf.c
===================================================================
diff --git a/release/scripts/startup/bl_ui/properties_data_modifier.py b/release/scripts/startup/bl_ui/properties_data_modifier.py
index a2146ad4e13..810ef076200 100644
--- a/release/scripts/startup/bl_ui/properties_data_modifier.py
+++ b/release/scripts/startup/bl_ui/properties_data_modifier.py
@@ -643,13 +643,14 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
def MULTIRES(self, layout, ob, md):
layout.row().prop(md, "subdivision_type", expand=True)
+ layout.row().prop(md, "use_opensubdiv")
split = layout.split()
col = split.column()
col.prop(md, "levels", text="Preview")
col.prop(md, "sculpt_levels", text="Sculpt")
col.prop(md, "render_levels", text="Render")
- if hasattr(md, "quality"):
+ if hasattr(md, "quality") and md.use_opensubdiv:
col.prop(md, "quality")
col = split.column()
@@ -1005,6 +1006,7 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
def SUBSURF(self, layout, ob, md):
from bpy import context
layout.row().prop(md, "subdivision_type", expand=True)
+ layout.row().prop(md, "use_opensubdiv")
split = layout.split()
col = split.column()
@@ -1028,7 +1030,7 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
col.label(text="Subdivisions:")
col.prop(md, "levels", text="View")
col.prop(md, "render_levels", text="Render")
- if hasattr(md, "quality"):
+ if hasattr(md, "quality") and md.use_opensubdiv:
col.prop(md, "quality")
col = split.column()
diff --git a/source/blender/makesdna/DNA_modifier_types.h b/source/blender/makesdna/DNA_modifier_types.h
index d41282d9ef5..ac5bdee87d7 100644
--- a/source/blender/makesdna/DNA_modifier_types.h
+++ b/source/blender/makesdna/DNA_modifier_types.h
@@ -142,6 +142,7 @@ typedef enum {
eSubsurfModifierFlag_ControlEdges = (1 << 2),
/* DEPRECATED, ONLY USED FOR DO-VERSIONS */
eSubsurfModifierFlag_SubsurfUv_DEPRECATED = (1 << 3),
+ eSubsurfModifierFlag_OpenSubdiv = (1 << 4),
} SubsurfModifierFlag;
typedef enum {
@@ -861,6 +862,8 @@ typedef enum {
eMultiresModifierFlag_ControlEdges = (1 << 0),
/* DEPRECATED, only used for versioning. */
eMultiresModifierFlag_PlainUv_DEPRECATED = (1 << 1),
+ /* use legacy or (still slow) opensubdiv mode */
+ eMultiresModifierFlag_OpenSubdiv = (1 << 2),
} MultiresModifierFlag;
typedef struct FluidsimModifierData {
diff --git a/source/blender/makesrna/intern/rna_modifier.c b/source/blender/makesrna/intern/rna_modifier.c
index 6af36969616..62f2920be7a 100644
--- a/source/blender/makesrna/intern/rna_modifier.c
+++ b/source/blender/makesrna/intern/rna_modifier.c
@@ -1286,6 +1286,11 @@ static void rna_def_modifier_subsurf(BlenderRNA *brna)
RNA_def_property_boolean_sdna(prop, NULL, "flags", eSubsurfModifierFlag_ControlEdges);
RNA_def_property_ui_text(prop, "Optimal Display", "Skip drawing/rendering of interior subdivided edges");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
+
+ prop = RNA_def_property(srna, "use_opensubdiv", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flags", eSubsurfModifierFlag_OpenSubdiv);
+ RNA_def_property_ui_text(prop, "Use Opensubdiv", "Use (slower) OpenSubdiv instead of legacy subsurf code");
+ RNA_def_property_update(prop, 0, "rna_Modifier_update");
}
static void rna_def_modifier_generic_map_info(StructRNA *srna)
@@ -1431,6 +1436,11 @@ static void rna_def_modifier_multires(BlenderRNA *brna)
RNA_def_property_boolean_sdna(prop, NULL, "flags", eMultiresModifierFlag_ControlEdges);
RNA_def_property_ui_text(prop, "Optimal Display", "Skip drawing/rendering of interior subdivided edges");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
+
+ prop = RNA_def_property(srna, "use_opensubdiv", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flags", eMultiresModifierFlag_OpenSubdiv);
+ RNA_def_property_ui_text(prop, "Use Opensubdiv", "Use (slower) OpenSubdiv instead of legacy multires code");
+ RNA_def_property_update(prop, 0, "rna_Modifier_update");
}
static void rna_def_modifier_lattice(BlenderRNA *brna)
diff --git a/source/blender/modifiers/intern/MOD_multires.c b/source/blender/modifiers/intern/MOD_multires.c
index 73fa7aa0e0d..85958e09f85 100644
--- a/source/blender/modifiers/intern/MOD_multires.c
+++ b/source/blender/modifiers/intern/MOD_multires.c
@@ -55,6 +55,10 @@
#include "MOD_modifiertypes.h"
+static Mesh *applyModifier_subdiv(ModifierData *md,
+ const ModifierEvalContext *ctx,
+ Mesh *mesh);
+
static void initData(ModifierData *md)
{
MultiresModifierData *mmd = (MultiresModifierData *)md;
@@ -67,7 +71,7 @@ static void initData(ModifierData *md)
mmd->quality = 3;
}
-#ifndef WITH_OPENSUBDIV_MODIFIER
+//#ifndef WITH_OPENSUBDIV_MODIFIER
static DerivedMesh *applyModifier_DM(
ModifierData *md, const ModifierEvalContext *ctx,
@@ -146,9 +150,28 @@ static DerivedMesh *applyModifier_DM(
return result;
}
-applyModifier_DM_wrapper(applyModifier, applyModifier_DM)
+applyModifier_DM_wrapper(applyModifier_legacy, applyModifier_DM)
+
+//#endif
+static Mesh *applyModifier(ModifierData *md,
+ const ModifierEvalContext *ctx,
+ Mesh *mesh)
+{
+ MultiresModifierData* mmd = (MultiresModifierData*)md;
+ if (mmd->flags & eMultiresModifierFlag_OpenSubdiv)
+ {
+#ifdef WITH_OPENSUBDIV_MODIFIER
+ return applyModifier_subdiv(md, ctx, mesh);
+#else
+ //silent fallback
+ return applyModifier_legacy(md, ctx, mesh);
#endif
+ }
+ else {
+ return applyModifier_legacy(md, ctx, mesh);
+ }
+}
#ifdef WITH_OPENSUBDIV_MODIFIER
diff --git a/source/blender/modifiers/intern/MOD_subsurf.c b/source/blender/modifiers/intern/MOD_subsurf.c
index aa97eaa89c9..c8bf3a9d3d7 100644
--- a/source/blender/modifiers/intern/MOD_subsurf.c
+++ b/source/blender/modifiers/intern/MOD_subsurf.c
@@ -55,10 +55,15 @@
#include "intern/CCGSubSurf.h"
+static Mesh *applyModifier_subdiv(ModifierData *md,
+ const ModifierEvalContext *ctx,
+ Mesh *mesh);
+
static void initData(ModifierData *md)
{
SubsurfModifierData *smd = (SubsurfModifierData *) md;
+ smd->subdivType = SUBSURF_TYPE_CATMULL_CLARK; //legacy is the default, since new opensubdiv impl sucks atm...
smd->levels = 1;
smd->renderLevels = 2;
smd->uv_smooth = SUBSURF_UV_SMOOTH_PRESERVE_CORNERS;
@@ -99,7 +104,7 @@ static bool isDisabled(const Scene *scene, ModifierData *md, bool useRenderParam
return get_render_subsurf_level(&scene->r, levels, useRenderParams != 0) == 0;
}
-#ifndef WITH_OPENSUBDIV_MODIFIER
+//#ifndef WITH_OPENSUBDIV_MODIFIER
static DerivedMesh *applyModifier_DM(
ModifierData *md, const ModifierEvalContext *ctx,
@@ -135,9 +140,28 @@ static DerivedMesh *applyModifier_DM(
return result;
}
-applyModifier_DM_wrapper(applyModifier, applyModifier_DM)
+applyModifier_DM_wrapper(applyModifier_legacy, applyModifier_DM)
+//#endif
+
+static Mesh *applyModifier(ModifierData *md,
+ const ModifierEvalContext *ctx,
+ Mesh *mesh)
+{
+ SubsurfModifierData* smd = (SubsurfModifierData*)md;
+ if (smd->flags & eSubsurfModifierFlag_OpenSubdiv)
+ {
+#ifdef WITH_OPENSUBDIV_MODIFIER
+ return applyModifier_subdiv(md, ctx, mesh);
+#else
+ //silent fallback
+ return applyModifier_legacy(md, ctx, mesh);
#endif
+ }
+ else {
+ return applyModifier_legacy(md, ctx, mesh);
+ }
+}
#ifdef WITH_OPENSUBDIV_MODIFIER
static int subdiv_levels_for_modifier_get(const SubsurfModifierData *smd,
@@ -275,11 +299,11 @@ ModifierTypeInfo modifierType_Subsurf = {
/* deformMatrices */ NULL,
/* deformVertsEM */ NULL,
/* deformMatricesEM */ NULL,
-#ifdef WITH_OPENSUBDIV_MODIFIER
- /* applyModifier */ applyModifier_subdiv,
-#else
+//#ifdef WITH_OPENSUBDIV_MODIFIER
+// /* applyModifier */ applyModifier_subdiv,
+//#else
/* applyModifier */ applyModifier,
-#endif
+//#endif
/* initData */ initData,
/* requiredDataMask */ NULL,
More information about the Bf-blender-cvs
mailing list