Commit: c2fa82e7a417ad98d0dd2ccd7aa084cb03ed11a1
Author: Sergey Sharybin
Date:   Mon Jun 18 11:21:33 2018 +0200
Branches: blender2.8
https://developer.blender.org/rBc2fa82e7a417ad98d0dd2ccd7aa084cb03ed11a1

Multires: Move away from using scene from modifier data

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

M       source/blender/blenkernel/BKE_multires.h
M       source/blender/blenkernel/BKE_object.h
M       source/blender/blenkernel/intern/multires.c
M       source/blender/blenkernel/intern/object.c
M       source/blender/blenkernel/intern/subsurf_ccg.c
M       source/blender/editors/object/object_bake.c
M       source/blender/editors/object/object_modifier.c
M       source/blender/editors/object/object_relations.c
M       source/blender/modifiers/intern/MOD_multires.c

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

diff --git a/source/blender/blenkernel/BKE_multires.h 
b/source/blender/blenkernel/BKE_multires.h
index cecea927e8a..3a70e145744 100644
--- a/source/blender/blenkernel/BKE_multires.h
+++ b/source/blender/blenkernel/BKE_multires.h
@@ -61,7 +61,7 @@ void multires_force_render_update(struct Object *ob);
 void multires_force_external_reload(struct Object *ob);
 
 /* internal, only called in subsurf_ccg.c */
-void multires_modifier_update_mdisps(struct DerivedMesh *dm);
+void multires_modifier_update_mdisps(struct DerivedMesh *dm, struct Scene 
*scene);
 void multires_modifier_update_hidden(struct DerivedMesh *dm);
 
 void multiresModifier_set_levels_from_disps(struct MultiresModifierData *mmd, 
struct Object *ob);
@@ -75,6 +75,7 @@ typedef enum {
 
 struct DerivedMesh *multires_make_derived_from_derived(struct DerivedMesh *dm,
                                                        struct 
MultiresModifierData *mmd,
+                                                       struct Scene *scene,
                                                        struct Object *ob,
                                                        MultiresFlags flags);
 
@@ -83,11 +84,11 @@ struct MultiresModifierData 
*find_multires_modifier_before(struct Scene *scene,
 struct MultiresModifierData *get_multires_modifier(struct Scene *scene, struct 
Object *ob, bool use_first);
 struct DerivedMesh *get_multires_dm(struct Depsgraph *depsgraph, struct Scene 
*scene, struct MultiresModifierData *mmd,
                                     struct Object *ob);
-void multiresModifier_del_levels(struct MultiresModifierData *, struct Object 
*, int direction);
-void multiresModifier_base_apply(struct MultiresModifierData *mmd, struct 
Object *ob);
-void multiresModifier_subdivide(struct MultiresModifierData *mmd, struct 
Object *ob, int updateblock, int simple);
+void multiresModifier_del_levels(struct MultiresModifierData *mmd, struct 
Scene *scene, struct Object *object, int direction);
+void multiresModifier_base_apply(struct MultiresModifierData *mmd, struct 
Scene *scene, struct Object *ob);
+void multiresModifier_subdivide(struct MultiresModifierData *mmd, struct Scene 
*scene, struct Object *ob, int updateblock, int simple);
 void multiresModifier_sync_levels_ex(
-        struct Object *ob_dst, struct MultiresModifierData *mmd_src, struct 
MultiresModifierData *mmd_dst);
+        struct Scene *scene, struct Object *ob_dst, struct 
MultiresModifierData *mmd_src, struct MultiresModifierData *mmd_dst);
 int multiresModifier_reshape(struct Depsgraph *depsgraph, struct Scene *scene, 
struct MultiresModifierData *mmd,
                              struct Object *dst, struct Object *src);
 int multiresModifier_reshapeFromDM(struct Depsgraph *depsgraph, struct Scene 
*scene, struct MultiresModifierData *mmd,
diff --git a/source/blender/blenkernel/BKE_object.h 
b/source/blender/blenkernel/BKE_object.h
index 9562e0e8f15..a54b244f5fd 100644
--- a/source/blender/blenkernel/BKE_object.h
+++ b/source/blender/blenkernel/BKE_object.h
@@ -73,7 +73,7 @@ void BKE_object_modifier_hook_reset(struct Object *ob, struct 
HookModifierData *
 
 bool BKE_object_support_modifier_type_check(const struct Object *ob, int 
modifier_type);
 
-void BKE_object_link_modifiers(struct Object *ob_dst, const struct Object 
*ob_src);
+void BKE_object_link_modifiers(struct Scene *scene, struct Object *ob_dst, 
const struct Object *ob_src);
 void BKE_object_free_modifiers(struct Object *ob, const int flag);
 
 void BKE_object_make_proxy(struct Object *ob, struct Object *target, struct 
Object *gob);
diff --git a/source/blender/blenkernel/intern/multires.c 
b/source/blender/blenkernel/intern/multires.c
index 5bd4a1a0475..22309be2a1b 100644
--- a/source/blender/blenkernel/intern/multires.c
+++ b/source/blender/blenkernel/intern/multires.c
@@ -337,17 +337,17 @@ MultiresModifierData *get_multires_modifier(Scene *scene, 
Object *ob, bool use_f
        return mmd;
 }
 
-static int multires_get_level(Object *ob, MultiresModifierData *mmd,
+static int multires_get_level(Scene *scene, Object *ob, MultiresModifierData 
*mmd,
                               bool render, bool ignore_simplify)
 {
        if (render)
-               return (mmd->modifier.scene) ? 
get_render_subsurf_level(&mmd->modifier.scene->r, mmd->renderlvl, true) : 
mmd->renderlvl;
+               return (scene != NULL) ? get_render_subsurf_level(&scene->r, 
mmd->renderlvl, true) : mmd->renderlvl;
        else if (ob->mode == OB_MODE_SCULPT)
                return mmd->sculptlvl;
        else if (ignore_simplify)
                return mmd->lvl;
        else
-               return (mmd->modifier.scene) ? 
get_render_subsurf_level(&mmd->modifier.scene->r, mmd->lvl, false) : mmd->lvl;
+               return (scene != NULL) ? get_render_subsurf_level(&scene->r, 
mmd->lvl, false) : mmd->lvl;
 }
 
 void multires_set_tot_level(Object *ob, MultiresModifierData *mmd, int lvl)
@@ -435,7 +435,7 @@ int multiresModifier_reshapeFromDeformMod(struct Depsgraph 
*depsgraph, Scene *sc
        float (*deformedVerts)[3];
        const ModifierEvalContext mectx = {depsgraph, ob, 0};
 
-       if (multires_get_level(ob, mmd, false, true) == 0)
+       if (multires_get_level(scene, ob, mmd, false, true) == 0)
                return 0;
 
        /* Create DerivedMesh for deformation modifier */
@@ -681,10 +681,10 @@ static void multires_del_higher(MultiresModifierData 
*mmd, Object *ob, int lvl)
 }
 
 /* (direction = 1) for delete higher, (direction = 0) for lower (not 
implemented yet) */
-void multiresModifier_del_levels(MultiresModifierData *mmd, Object *ob, int 
direction)
+void multiresModifier_del_levels(MultiresModifierData *mmd, Scene *scene, 
Object *ob, int direction)
 {
        Mesh *me = BKE_mesh_from_object(ob);
-       int lvl = multires_get_level(ob, mmd, false, true);
+       int lvl = multires_get_level(scene, ob, mmd, false, true);
        int levels = mmd->totlvl - lvl;
        MDisps *mdisps;
 
@@ -701,7 +701,7 @@ void multiresModifier_del_levels(MultiresModifierData *mmd, 
Object *ob, int dire
        multires_set_tot_level(ob, mmd, lvl);
 }
 
-static DerivedMesh *multires_dm_create_local(Object *ob, DerivedMesh *dm, int 
lvl, int totlvl, int simple, bool alloc_paint_mask)
+static DerivedMesh *multires_dm_create_local(Scene *scene, Object *ob, 
DerivedMesh *dm, int lvl, int totlvl, int simple, bool alloc_paint_mask)
 {
        MultiresModifierData mmd = {{NULL}};
        MultiresFlags flags = MULTIRES_USE_LOCAL_MMD;
@@ -715,7 +715,7 @@ static DerivedMesh *multires_dm_create_local(Object *ob, 
DerivedMesh *dm, int lv
        if (alloc_paint_mask)
                flags |= MULTIRES_ALLOC_PAINT_MASK;
 
-       return multires_make_derived_from_derived(dm, &mmd, ob, flags);
+       return multires_make_derived_from_derived(dm, &mmd, scene, ob, flags);
 }
 
 static DerivedMesh *subsurf_dm_create_local(Object *ob, DerivedMesh *dm, int 
lvl, int simple, int optimal, int plain_uv, int alloc_paint_mask)
@@ -751,7 +751,7 @@ static float v3_dist_from_plane(float v[3], float 
center[3], float no[3])
        return dot_v3v3(s, no);
 }
 
-void multiresModifier_base_apply(MultiresModifierData *mmd, Object *ob)
+void multiresModifier_base_apply(MultiresModifierData *mmd, Scene *scene, 
Object *ob)
 {
        DerivedMesh *cddm, *dispdm, *origdm;
        Mesh *me;
@@ -773,7 +773,7 @@ void multiresModifier_base_apply(MultiresModifierData *mmd, 
Object *ob)
        /* generate highest level with displacements */
        cddm = CDDM_from_mesh(me);
        DM_set_only_copy(cddm, CD_MASK_BAREMESH);
-       dispdm = multires_dm_create_local(ob, cddm, totlvl, totlvl, 0, 0);
+       dispdm = multires_dm_create_local(scene, ob, cddm, totlvl, totlvl, 0, 
0);
        cddm->release(cddm);
 
        /* copy the new locations of the base verts into the mesh */
@@ -879,7 +879,9 @@ void multiresModifier_base_apply(MultiresModifierData *mmd, 
Object *ob)
        dispdm->release(dispdm);
 }
 
-static void multires_subdivide(MultiresModifierData *mmd, Object *ob, int 
totlvl, int updateblock, int simple)
+static void multires_subdivide(
+        MultiresModifierData *mmd, Scene *scene, Object *ob,
+        int totlvl, int updateblock, int simple)
 {
        Mesh *me = ob->data;
        MDisps *mdisps;
@@ -912,7 +914,7 @@ static void multires_subdivide(MultiresModifierData *mmd, 
Object *ob, int totlvl
                ss = ((CCGDerivedMesh *)highdm)->ss;
 
                /* create multires DM from original mesh at low level */
-               lowdm = multires_dm_create_local(ob, cddm, lvl, lvl, simple, 
has_mask);
+               lowdm = multires_dm_create_local(scene, ob, cddm, lvl, lvl, 
simple, has_mask);
                BLI_assert(lowdm != cddm);
                cddm->release(cddm);
 
@@ -962,9 +964,9 @@ static void multires_subdivide(MultiresModifierData *mmd, 
Object *ob, int totlvl
        multires_set_tot_level(ob, mmd, totlvl);
 }
 
-void multiresModifier_subdivide(MultiresModifierData *mmd, Object *ob, int 
updateblock, int simple)
+void multiresModifier_subdivide(MultiresModifierData *mmd, Scene *scene, 
Object *ob, int updateblock, int simple)
 {
-       multires_subdivide(mmd, ob, mmd->totlvl + 1, updateblock, simple);
+       multires_subdivide(mmd, scene, ob, mmd->totlvl + 1, updateblock, 
simple);
 }
 
 static void grid_tangent(const CCGKey *key, int x, int y, int axis, CCGElem 
*grid, float t[3])
@@ -1197,7 +1199,7 @@ static void multiresModifier_disp_run(DerivedMesh *dm, 
Mesh *me, DerivedMesh *dm
        }
 }
 
-void multires_modifier_update_mdisps(struct DerivedMesh *dm)
+void multires_modifier_update_mdisps(struct DerivedMesh *dm, Scene *scene)
 {
        CCGDerivedMesh *ccgdm = (CCGDerivedMesh *)dm;
        Object *ob;
@@ -1233,7 +1235,7 @@ void multires_modifier_update_mdisps(struct DerivedMesh 
*dm)
                        ss = ((CCGDerivedMesh *)highdm)->ss;
 
                        /* create multires DM from original mesh and 
displacements */
-                       lowdm = multires_dm_create_local(ob, cddm, lvl, totlvl, 
mmd->simple, has_mask);
+                       lowdm = multires_dm_create_local(scene, ob, cddm, lvl, 
totlvl, mmd->simple, has_mask);
                        cddm->release(cddm);
 
                        /* gather grid data */
@@ -1354,6 +1356,7 @@ void multires_stitch_grids(Object *ob)
 
 DerivedMesh *multires_make_derived_from_derived(DerivedMesh *dm,
                                                 MultiresModifierData *mmd,
+                                                Scene *scene,
                                                 Object *ob,
                                                 MultiresFlags flags)
 {
@@ -1364,7 +1367,7 @@ DerivedMesh 
*multires_make_derived_from_derived(DerivedMesh *dm,
        CCGKey key;
        const bool render = (fl

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to