Commit: 02dbe3b0c78045abb49a32c562933b621f3aa0b1
Author: Sergey Sharybin
Date:   Tue Aug 14 11:45:26 2018 +0200
Branches: blender2.8
https://developer.blender.org/rB02dbe3b0c78045abb49a32c562933b621f3aa0b1

Multires: Synchronize settings with Subsurf modifier

Currently no functional changes, just exposes all settings which we need
for OpenSubdiv, similar to what Subsurf modifier is doing already.

Reviewers: brecht

Reviewed By: brecht

Differential Revision: https://developer.blender.org/D3602

===================================================================

M       release/scripts/startup/bl_ui/properties_data_modifier.py
M       source/blender/blenkernel/intern/multires.c
M       source/blender/blenloader/intern/versioning_280.c
M       source/blender/editors/object/object_bake_api.c
M       source/blender/makesdna/DNA_modifier_types.h
M       source/blender/makesrna/intern/rna_modifier.c
M       source/blender/modifiers/intern/MOD_multires.c

===================================================================

diff --git a/release/scripts/startup/bl_ui/properties_data_modifier.py 
b/release/scripts/startup/bl_ui/properties_data_modifier.py
index 5dfd8994ed4..f865a7f7226 100644
--- a/release/scripts/startup/bl_ui/properties_data_modifier.py
+++ b/release/scripts/startup/bl_ui/properties_data_modifier.py
@@ -613,6 +613,8 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
         col.prop(md, "levels", text="Preview")
         col.prop(md, "sculpt_levels", text="Sculpt")
         col.prop(md, "render_levels", text="Render")
+        if hasattr(md, "quality"):
+            col.prop(md, "quality")
 
         col = split.column()
 
@@ -621,7 +623,7 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
         col.operator("object.multires_higher_levels_delete", text="Delete 
Higher")
         col.operator("object.multires_reshape", text="Reshape")
         col.operator("object.multires_base_apply", text="Apply Base")
-        col.prop(md, "use_subsurf_uv")
+        col.prop(md, "uv_smooth", text="")
         col.prop(md, "show_only_control_edges")
 
         layout.separator()
diff --git a/source/blender/blenkernel/intern/multires.c 
b/source/blender/blenkernel/intern/multires.c
index 0774d65182f..bb261ec9590 100644
--- a/source/blender/blenkernel/intern/multires.c
+++ b/source/blender/blenkernel/intern/multires.c
@@ -884,7 +884,7 @@ void multiresModifier_base_apply(MultiresModifierData *mmd, 
Scene *scene, Object
        /* subdivide the mesh to highest level without displacements */
        cddm = CDDM_from_mesh(me);
        DM_set_only_copy(cddm, CD_MASK_BAREMESH);
-       origdm = subsurf_dm_create_local(scene, ob, cddm, totlvl, 0, 0, 
mmd->flags & eMultiresModifierFlag_PlainUv, 0, false);
+       origdm = subsurf_dm_create_local(scene, ob, cddm, totlvl, 0, 0, 
mmd->uv_smooth == SUBSURF_UV_SMOOTH_NONE, 0, false);
        cddm->release(cddm);
 
        /* calc disps */
@@ -925,7 +925,7 @@ static void multires_subdivide(
                /* create subsurf DM from original mesh at high level */
                cddm = CDDM_from_mesh(me);
                DM_set_only_copy(cddm, CD_MASK_BAREMESH);
-               highdm = subsurf_dm_create_local(scene, ob, cddm, totlvl, 
simple, 0, mmd->flags & eMultiresModifierFlag_PlainUv, has_mask, false);
+               highdm = subsurf_dm_create_local(scene, ob, cddm, totlvl, 
simple, 0, mmd->uv_smooth == SUBSURF_UV_SMOOTH_NONE, has_mask, false);
                ss = ((CCGDerivedMesh *)highdm)->ss;
 
                /* create multires DM from original mesh at low level */
@@ -1246,7 +1246,7 @@ void multires_modifier_update_mdisps(struct DerivedMesh 
*dm, Scene *scene)
                        else cddm = CDDM_from_mesh(me);
                        DM_set_only_copy(cddm, CD_MASK_BAREMESH);
 
-                       highdm = subsurf_dm_create_local(scene, ob, cddm, 
totlvl, mmd->simple, 0, mmd->flags & eMultiresModifierFlag_PlainUv, has_mask, 
false);
+                       highdm = subsurf_dm_create_local(scene, ob, cddm, 
totlvl, mmd->simple, 0, mmd->uv_smooth == SUBSURF_UV_SMOOTH_NONE, has_mask, 
false);
                        ss = ((CCGDerivedMesh *)highdm)->ss;
 
                        /* create multires DM from original mesh and 
displacements */
@@ -1308,7 +1308,7 @@ void multires_modifier_update_mdisps(struct DerivedMesh 
*dm, Scene *scene)
                        else cddm = CDDM_from_mesh(me);
                        DM_set_only_copy(cddm, CD_MASK_BAREMESH);
 
-                       subdm = subsurf_dm_create_local(scene, ob, cddm, 
mmd->totlvl, mmd->simple, 0, mmd->flags & eMultiresModifierFlag_PlainUv, 
has_mask, false);
+                       subdm = subsurf_dm_create_local(scene, ob, cddm, 
mmd->totlvl, mmd->simple, 0, mmd->uv_smooth == SUBSURF_UV_SMOOTH_NONE, 
has_mask, false);
                        cddm->release(cddm);
 
                        multiresModifier_disp_run(dm, me, NULL, 
CALC_DISPLACEMENTS, subdm->getGridData(subdm), mmd->totlvl);
@@ -1390,7 +1390,7 @@ DerivedMesh 
*multires_make_derived_from_derived(DerivedMesh *dm,
 
        result = subsurf_dm_create_local(scene, ob, dm, lvl,
                                         mmd->simple, mmd->flags & 
eMultiresModifierFlag_ControlEdges,
-                                        mmd->flags & 
eMultiresModifierFlag_PlainUv,
+                                        mmd->uv_smooth == 
SUBSURF_UV_SMOOTH_NONE,
                                         flags & MULTIRES_ALLOC_PAINT_MASK,
                                         render);
 
@@ -2214,7 +2214,7 @@ static void multires_apply_smat(struct Depsgraph 
*depsgraph, Scene *scene, Objec
        MEM_freeN(vertCos);
 
        /* scaled ccgDM for tangent space of object with applied scale */
-       dm = subsurf_dm_create_local(scene, ob, cddm, high_mmd.totlvl, 
high_mmd.simple, 0, mmd->flags & eMultiresModifierFlag_PlainUv, 0, false);
+       dm = subsurf_dm_create_local(scene, ob, cddm, high_mmd.totlvl, 
high_mmd.simple, 0, mmd->uv_smooth == SUBSURF_UV_SMOOTH_NONE, 0, false);
        cddm->release(cddm);
 
        gridSize = dm->getGridSize(dm);
diff --git a/source/blender/blenloader/intern/versioning_280.c 
b/source/blender/blenloader/intern/versioning_280.c
index fbc98a594a2..fb579aff479 100644
--- a/source/blender/blenloader/intern/versioning_280.c
+++ b/source/blender/blenloader/intern/versioning_280.c
@@ -1840,12 +1840,13 @@ void blo_do_versions_280(FileData *fd, Library 
*UNUSED(lib), Main *bmain)
        }
 
        {
+               /* Versioning code for Subsurf modifier. */
                if (!DNA_struct_elem_find(fd->filesdna, "SubsurfModifier", 
"short", "uv_smooth")) {
                        for (Object *object = bmain->object.first; object != 
NULL; object = object->id.next) {
                                for (ModifierData *md = 
object->modifiers.first; md; md = md->next) {
                                        if (md->type == eModifierType_Subsurf) {
                                                SubsurfModifierData *smd = 
(SubsurfModifierData *)md;
-                                               if (smd->flags & 
eSubsurfModifierFlag_SubsurfUv) {
+                                               if (smd->flags & 
eSubsurfModifierFlag_SubsurfUv_DEPRECATED) {
                                                        smd->uv_smooth = 
SUBSURF_UV_SMOOTH_PRESERVE_CORNERS;
                                                }
                                                else {
@@ -1866,5 +1867,22 @@ void blo_do_versions_280(FileData *fd, Library 
*UNUSED(lib), Main *bmain)
                                }
                        }
                }
+               /* Versioning code for Multires modifier. */
+               if (!DNA_struct_elem_find(fd->filesdna, "MultiresModifier", 
"short", "quality")) {
+                       for (Object *object = bmain->object.first; object != 
NULL; object = object->id.next) {
+                               for (ModifierData *md = 
object->modifiers.first; md; md = md->next) {
+                                       if (md->type == eModifierType_Multires) 
{
+                                               MultiresModifierData *mmd = 
(MultiresModifierData *)md;
+                                               mmd->quality = 3;
+                                               if (mmd->flags & 
eMultiresModifierFlag_PlainUv_DEPRECATED) {
+                                                       mmd->uv_smooth = 
SUBSURF_UV_SMOOTH_NONE;
+                                               }
+                                               else {
+                                                       mmd->uv_smooth = 
SUBSURF_UV_SMOOTH_PRESERVE_CORNERS;
+                                               }
+                                       }
+                               }
+                       }
+               }
        }
 }
diff --git a/source/blender/editors/object/object_bake_api.c 
b/source/blender/editors/object/object_bake_api.c
index e8fabdabf17..d0d82a8ccc7 100644
--- a/source/blender/editors/object/object_bake_api.c
+++ b/source/blender/editors/object/object_bake_api.c
@@ -792,7 +792,7 @@ static int bake(
                mmd_low = (MultiresModifierData *) modifiers_findByType(ob_low, 
eModifierType_Multires);
                if (mmd_low) {
                        mmd_flags_low = mmd_low->flags;
-                       mmd_low->flags |= eMultiresModifierFlag_PlainUv;
+                       mmd_low->uv_smooth = SUBSURF_UV_SMOOTH_NONE;
                }
        }
 
diff --git a/source/blender/makesdna/DNA_modifier_types.h 
b/source/blender/makesdna/DNA_modifier_types.h
index 404e8d2d137..642e7d14869 100644
--- a/source/blender/makesdna/DNA_modifier_types.h
+++ b/source/blender/makesdna/DNA_modifier_types.h
@@ -140,7 +140,7 @@ typedef enum {
        eSubsurfModifierFlag_DebugIncr    = (1 << 1),
        eSubsurfModifierFlag_ControlEdges = (1 << 2),
        /* DEPRECATED, ONLY USED FOR DO-VERSIONS */
-       eSubsurfModifierFlag_SubsurfUv    = (1 << 3),
+       eSubsurfModifierFlag_SubsurfUv_DEPRECATED    = (1 << 3),
 } SubsurfModifierFlag;
 
 typedef enum {
@@ -155,7 +155,7 @@ typedef enum {
        SUBSURF_UV_SMOOTH_PRESERVE_CORNERS_JUNCTIONS_AND_CONCAVE = 3,
        SUBSURF_UV_SMOOTH_PRESERVE_BOUNDARIES = 4,
        SUBSURF_UV_SMOOTH_ALL = 5,
-} eSubsurfModifierUVSmooth;
+} eSubsurfUVSmooth;
 
 typedef struct SubsurfModifierData {
        ModifierData modifier;
@@ -844,11 +844,15 @@ typedef struct MultiresModifierData {
 
        char lvl, sculptlvl, renderlvl, totlvl;
        char simple, flags, pad[2];
+       short quality;
+       short uv_smooth;
+       short pad2[2];
 } MultiresModifierData;
 
 typedef enum {
        eMultiresModifierFlag_ControlEdges = (1 << 0),
-       eMultiresModifierFlag_PlainUv      = (1 << 1),
+       /* DEPRECATED, only used for versioning. */
+       eMultiresModifierFlag_PlainUv_DEPRECATED      = (1 << 1),
 } MultiresModifierFlag;
 
 typedef struct FluidsimModifierData {
diff --git a/source/blender/makesrna/intern/rna_modifier.c 
b/source/blender/makesrna/intern/rna_modifier.c
index 50907503aca..2b0f22eb8fc 100644
--- a/source/blender/makesrna/intern/rna_modifier.c
+++ b/source/blender/makesrna/intern/rna_modifier.c
@@ -1176,6 +1176,7 @@ static void 
rna_ParticleInstanceModifier_particle_system_set(PointerRNA *ptr, co
 
 #else
 
+/* NOTE: *MUST* return subdivision_type property. */
 static PropertyRNA *rna_def_property_subdivision_common(StructRNA *srna, const 
char type[])
 {
        static const EnumPropertyItem prop_subdivision_type_items[] = {
@@ -1184,17 +1185,6 @@ static PropertyRNA 
*rna_def_property_subdivision_common(StructRNA *srna, const c
                {0, NULL, 0, NULL, NULL}
        };
 
-       PropertyRNA *prop = RNA_def_property(srna, "subdivision_type", 
PROP_ENUM, PROP_NONE);
-       RNA_def_property_enum_sdna(prop, NULL, type);
-       RNA_def_property_enum_items(prop, prop_subdivision_type_items);
-       RNA_def_property_ui_text(prop, "Subdivision Type", "Select type of 
subdivision algorithm");
-       RNA_def_property_update(prop, 0, "rna_Modifier_update");
-
-       return prop;
-}
-
-static void rna_def_modifier_subsurf(BlenderRNA *brna)
-{
        static const EnumPropertyItem prop_uv_smooth_items[] = {
                {SUBSURF_UV_SMOOTH_NONE, "NONE", 0,
                 "Sharp", "UVs are not smoothed, boundaries are kept sharp"},
@@ -1215,6 +1205,34 @@ static void rna_def_modifier_subsurf(BlenderRNA *brna)
                {0, NULL, 0, NULL, NULL}
        };
 
+       PropertyRNA *prop;
+
+       prop = RNA_def_property(srna, "uv_smooth", PROP_ENUM, PROP_NONE);
+       RNA_def_property_enum_sdna(prop, NULL, "uv_smooth");
+       RNA_def_property_enum_items(prop, prop_uv_smooth_items);
+       RNA_def_property_ui_text(prop, "UV Smooth", "Controls how smoothing is 
applied to UVs");
+       RNA_def_property_update(prop, 0, "rna_Modifier_update");
+
+#ifdef WITH_OPENSUBDIV_MODIFIER
+       prop = RNA_def_property(srna, "quality", PROP_INT, PROP_UNSIGNED);
+       RNA_def_property_int_sdna(pr

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to