Commit: 7a4b784909b3d31f318f92ddcfd534223f3e8412
Author: Sergey Sharybin
Date:   Mon Jun 18 11:51:02 2018 +0200
Branches: blender2.8
https://developer.blender.org/rB7a4b784909b3d31f318f92ddcfd534223f3e8412

Subsurf: Move away from using scene from modifier data

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

M       source/blender/blenkernel/BKE_shrinkwrap.h
M       source/blender/blenkernel/BKE_subsurf.h
M       source/blender/blenkernel/intern/multires.c
M       source/blender/blenkernel/intern/shrinkwrap.c
M       source/blender/blenkernel/intern/subsurf_ccg.c
M       source/blender/editors/object/object_bake.c
M       source/blender/editors/uvedit/uvedit_unwrap_ops.c
M       source/blender/modifiers/intern/MOD_shrinkwrap.c
M       source/blender/modifiers/intern/MOD_subsurf.c
M       source/blender/render/extern/include/RE_multires_bake.h
M       source/blender/render/intern/source/multires_bake.c

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

diff --git a/source/blender/blenkernel/BKE_shrinkwrap.h 
b/source/blender/blenkernel/BKE_shrinkwrap.h
index c92b0fd1272..d4df12783fa 100644
--- a/source/blender/blenkernel/BKE_shrinkwrap.h
+++ b/source/blender/blenkernel/BKE_shrinkwrap.h
@@ -76,7 +76,7 @@ typedef struct ShrinkwrapCalcData {
 
 } ShrinkwrapCalcData;
 
-void shrinkwrapModifier_deform(struct ShrinkwrapModifierData *smd, struct 
Object *ob, struct Mesh *mesh,
+void shrinkwrapModifier_deform(struct ShrinkwrapModifierData *smd, struct 
Scene *scene, struct Object *ob, struct Mesh *mesh,
                                float (*vertexCos)[3], int numVerts);
 
 /*
diff --git a/source/blender/blenkernel/BKE_subsurf.h 
b/source/blender/blenkernel/BKE_subsurf.h
index 96320415b16..6cb09ff8822 100644
--- a/source/blender/blenkernel/BKE_subsurf.h
+++ b/source/blender/blenkernel/BKE_subsurf.h
@@ -67,6 +67,7 @@ typedef enum {
 struct DerivedMesh *subsurf_make_derived_from_derived(
         struct DerivedMesh *dm,
         struct SubsurfModifierData *smd,
+        struct Scene *scene,
         float (*vertCos)[3],
         SubsurfFlags flags);
 
diff --git a/source/blender/blenkernel/intern/multires.c 
b/source/blender/blenkernel/intern/multires.c
index 22309be2a1b..00a3e5c77d0 100644
--- a/source/blender/blenkernel/intern/multires.c
+++ b/source/blender/blenkernel/intern/multires.c
@@ -718,7 +718,9 @@ static DerivedMesh *multires_dm_create_local(Scene *scene, 
Object *ob, DerivedMe
        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)
+static DerivedMesh *subsurf_dm_create_local(
+        Scene *scene, Object *ob, DerivedMesh *dm,
+        int lvl, int simple, int optimal, int plain_uv, int alloc_paint_mask)
 {
        SubsurfModifierData smd = {{NULL}};
        SubsurfFlags flags = 0;
@@ -737,7 +739,7 @@ static DerivedMesh *subsurf_dm_create_local(Object *ob, 
DerivedMesh *dm, int lvl
        if (alloc_paint_mask)
                flags |= SUBSURF_ALLOC_PAINT_MASK;
 
-       return subsurf_make_derived_from_derived(dm, &smd, NULL, flags);
+       return subsurf_make_derived_from_derived(dm, &smd, scene, NULL, flags);
 }
 
 
@@ -869,7 +871,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(ob, cddm, totlvl, 0, 0, mmd->flags & 
eMultiresModifierFlag_PlainUv, 0);
+       origdm = subsurf_dm_create_local(scene, ob, cddm, totlvl, 0, 0, 
mmd->flags & eMultiresModifierFlag_PlainUv, 0);
        cddm->release(cddm);
 
        /* calc disps */
@@ -910,7 +912,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(ob, cddm, totlvl, simple, 0, 
mmd->flags & eMultiresModifierFlag_PlainUv, has_mask);
+               highdm = subsurf_dm_create_local(scene, ob, cddm, totlvl, 
simple, 0, mmd->flags & eMultiresModifierFlag_PlainUv, has_mask);
                ss = ((CCGDerivedMesh *)highdm)->ss;
 
                /* create multires DM from original mesh at low level */
@@ -1231,7 +1233,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(ob, cddm, totlvl, 
mmd->simple, 0, mmd->flags & eMultiresModifierFlag_PlainUv, has_mask);
+                       highdm = subsurf_dm_create_local(scene, ob, cddm, 
totlvl, mmd->simple, 0, mmd->flags & eMultiresModifierFlag_PlainUv, has_mask);
                        ss = ((CCGDerivedMesh *)highdm)->ss;
 
                        /* create multires DM from original mesh and 
displacements */
@@ -1293,7 +1295,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(ob, cddm, mmd->totlvl, 
mmd->simple, 0, mmd->flags & eMultiresModifierFlag_PlainUv, has_mask);
+                       subdm = subsurf_dm_create_local(scene, ob, cddm, 
mmd->totlvl, mmd->simple, 0, mmd->flags & eMultiresModifierFlag_PlainUv, 
has_mask);
                        cddm->release(cddm);
 
                        multiresModifier_disp_run(dm, me, NULL, 
CALC_DISPLACEMENTS, subdm->getGridData(subdm), mmd->totlvl);
@@ -1373,7 +1375,7 @@ DerivedMesh 
*multires_make_derived_from_derived(DerivedMesh *dm,
        if (lvl == 0)
                return dm;
 
-       result = subsurf_dm_create_local(ob, dm, lvl,
+       result = subsurf_dm_create_local(scene, ob, dm, lvl,
                                         mmd->simple, mmd->flags & 
eMultiresModifierFlag_ControlEdges,
                                         mmd->flags & 
eMultiresModifierFlag_PlainUv,
                                         flags & MULTIRES_ALLOC_PAINT_MASK);
@@ -2198,7 +2200,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(ob, cddm, high_mmd.totlvl, 
high_mmd.simple, 0, mmd->flags & eMultiresModifierFlag_PlainUv, 0);
+       dm = subsurf_dm_create_local(scene, ob, cddm, high_mmd.totlvl, 
high_mmd.simple, 0, mmd->flags & eMultiresModifierFlag_PlainUv, 0);
        cddm->release(cddm);
 
        gridSize = dm->getGridSize(dm);
diff --git a/source/blender/blenkernel/intern/shrinkwrap.c 
b/source/blender/blenkernel/intern/shrinkwrap.c
index 3db03c3f085..fdade3f5010 100644
--- a/source/blender/blenkernel/intern/shrinkwrap.c
+++ b/source/blender/blenkernel/intern/shrinkwrap.c
@@ -600,7 +600,7 @@ static void 
shrinkwrap_calc_nearest_surface_point(ShrinkwrapCalcData *calc)
 }
 
 /* Main shrinkwrap function */
-void shrinkwrapModifier_deform(ShrinkwrapModifierData *smd, Object *ob, Mesh 
*mesh,
+void shrinkwrapModifier_deform(ShrinkwrapModifierData *smd, struct Scene 
*scene, Object *ob, Mesh *mesh,
                                float (*vertexCos)[3], int numVerts)
 {
 
@@ -660,7 +660,7 @@ void shrinkwrapModifier_deform(ShrinkwrapModifierData *smd, 
Object *ob, Mesh *me
                        /* TODO to be moved to Mesh once we are done with 
changes in subsurf code. */
                        DerivedMesh *dm = CDDM_from_mesh(mesh);
 
-                       ss_mesh = subsurf_make_derived_from_derived(dm, &ssmd, 
NULL, (ob->mode & OB_MODE_EDIT) ? SUBSURF_IN_EDIT_MODE : 0);
+                       ss_mesh = subsurf_make_derived_from_derived(dm, &ssmd, 
scene, NULL, (ob->mode & OB_MODE_EDIT) ? SUBSURF_IN_EDIT_MODE : 0);
 
                        if (ss_mesh) {
                                calc.vert = ss_mesh->getVertDataArray(ss_mesh, 
CD_MVERT);
diff --git a/source/blender/blenkernel/intern/subsurf_ccg.c 
b/source/blender/blenkernel/intern/subsurf_ccg.c
index 694f1d8bd5a..9ea6ef62e4e 100644
--- a/source/blender/blenkernel/intern/subsurf_ccg.c
+++ b/source/blender/blenkernel/intern/subsurf_ccg.c
@@ -2930,6 +2930,7 @@ static bool subsurf_use_gpu_backend(SubsurfFlags flags)
 struct DerivedMesh *subsurf_make_derived_from_derived(
         struct DerivedMesh *dm,
         struct SubsurfModifierData *smd,
+        struct Scene *scene,
         float (*vertCos)[3],
         SubsurfFlags flags)
 {
@@ -2943,7 +2944,7 @@ struct DerivedMesh *subsurf_make_derived_from_derived(
        /* note: editmode calculation can only run once per
         * modifier stack evaluation (uses freed cache) [#36299] */
        if (flags & SUBSURF_FOR_EDIT_MODE) {
-               int levels = (smd->modifier.scene) ? 
get_render_subsurf_level(&smd->modifier.scene->r, smd->levels, false) : 
smd->levels;
+               int levels = (scene != NULL) ? 
get_render_subsurf_level(&scene->r, smd->levels, false) : smd->levels;
 
                /* TODO(sergey): Same as emCache below. */
                if ((flags & SUBSURF_IN_EDIT_MODE) && smd->mCache) {
@@ -2964,7 +2965,7 @@ struct DerivedMesh *subsurf_make_derived_from_derived(
        else if (flags & SUBSURF_USE_RENDER_PARAMS) {
                /* Do not use cache in render mode. */
                CCGSubSurf *ss;
-               int levels = (smd->modifier.scene) ? 
get_render_subsurf_level(&smd->modifier.scene->r, smd->renderLevels, true) : 
smd->renderLevels;
+               int levels = (scene != NULL) ? 
get_render_subsurf_level(&scene->r, smd->renderLevels, true) : 
smd->renderLevels;
 
                if (levels == 0)
                        return dm;
@@ -2980,7 +2981,7 @@ struct DerivedMesh *subsurf_make_derived_from_derived(
        }
        else {
                int useIncremental = (smd->flags & 
eSubsurfModifierFlag_Incremental);
-               int levels = (smd->modifier.scene) ? 
get_render_subsurf_level(&smd->modifier.scene->r, smd->levels, false) : 
smd->levels;
+               int levels = (scene != NULL) ? 
get_render_subsurf_level(&scene->r, smd->levels, false) : smd->levels;
                CCGSubSurf *ss;
 
                /* It is quite possible there is a much better place to do 
this. It
diff --git a/source/blender/editors/object/object_bake.c 
b/source/blender/editors/object/object_bake.c
index 954de8e58af..8ad0d09a9fb 100644
--- a/source/blender/editors/object/object_bake.c
+++ b/source/blender/editors/object/object_bake.c
@@ -118,6 +118,7 @@ typedef struct MultiresBakerJobData {
 
 /* data passing to multires-baker job */
 typedef struct {
+       Scene *scene;
        ListBase data;
        bool bake_clear;      /* Clear the images before baking */
        int bake_filter;      /* Bake-filter, aka margin */
@@ -371,6 +372,7 @@ static int multiresbake_image_exec_locked(bContext *C, 
wmOperator *op)
                multires_force_update(ob);
 
                /* copy data stored in job descriptor */
+               bkr.scene = scene;
                bkr.bake_filter = scene->r.bake_filter;
                bkr.mode = scene->r.bake_mode;
                bkr.use_lores_mesh = scene->r.bake_flag & R_BAKE_LORES_MESH;
@@ -413,6 +415,7 @@ static void init_multiresbake_job(bContext *C, 
MultiresBakeJob *bkj)
        Object *ob;
 
        /* backup scene settings, so their changing in UI would take no effect 
on baker */
+       bkj->scene = scene;
        bkj->bake_filter = scene->r.bake_filter;
        bkj->mode = scene->r.bake_mode;
        bkj->use_lores_mesh = scene->r.bake_flag & R_BAKE_LORES_MESH;
@@ -474,6 +477,7 @@ static void multiresbake_startjob(void *bkv, short *stop, 
short *do_update, floa
                MultiresBakeRender bkr = {NULL};
 
                /* copy data stored in job descriptor */
+               bkr.scene = bkj->scene;
                bkr.bake_filter = bkj->bake_filter;
                bkr.mode = bkj->mode;
                bkr.use_lores_mesh = bkj->use_lores_mesh;
diff --git a/source/blender/editors/uvedit/uvedit_unwrap_ops.

@@ 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