Commit: dacc6d4b0290050034eaf9290c8542343b67b129
Author: Campbell Barton
Date:   Tue Feb 13 18:15:47 2018 +1100
Branches: blender2.8
https://developer.blender.org/rBdacc6d4b0290050034eaf9290c8542343b67b129

Object Mode: remove Scene.obedit in draw manager

Part of larger change to remove this variable entirely.

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

M       source/blender/draw/engines/clay/clay_engine.c
M       source/blender/draw/engines/eevee/eevee_materials.c
M       source/blender/draw/intern/DRW_render.h
M       source/blender/draw/intern/draw_manager.c
M       source/blender/draw/modes/edit_curve_mode.c
M       source/blender/draw/modes/edit_lattice_mode.c
M       source/blender/draw/modes/edit_mesh_mode.c
M       source/blender/draw/modes/edit_metaball_mode.c
M       source/blender/draw/modes/edit_text_mode.c
M       source/blender/draw/modes/object_mode.c

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

diff --git a/source/blender/draw/engines/clay/clay_engine.c 
b/source/blender/draw/engines/clay/clay_engine.c
index 50c6790f817..4b554f776a6 100644
--- a/source/blender/draw/engines/clay/clay_engine.c
+++ b/source/blender/draw/engines/clay/clay_engine.c
@@ -770,11 +770,7 @@ static void clay_cache_populate_particles(void *vedata, 
Object *ob)
        CLAY_StorageList *stl = ((CLAY_Data *)vedata)->stl;
        const DRWContextState *draw_ctx = DRW_context_state_get();
 
-
-       Scene *scene = draw_ctx->scene;
-       Object *obedit = scene->obedit;
-
-       if (ob != obedit) {
+       if (ob != draw_ctx->object_edit) {
                for (ParticleSystem *psys = ob->particlesystem.first; psys; 
psys = psys->next) {
                        if (psys_check_enabled(ob, psys, false)) {
                                ParticleSettings *part = psys->part;
diff --git a/source/blender/draw/engines/eevee/eevee_materials.c 
b/source/blender/draw/engines/eevee/eevee_materials.c
index 9754bfbd78b..71564be496a 100644
--- a/source/blender/draw/engines/eevee/eevee_materials.c
+++ b/source/blender/draw/engines/eevee/eevee_materials.c
@@ -1377,7 +1377,7 @@ void EEVEE_materials_cache_populate(EEVEE_Data *vedata, 
EEVEE_ViewLayerData *sld
        }
 
        if (ob->type == OB_MESH) {
-               if (ob != draw_ctx->scene->obedit) {
+               if (ob != draw_ctx->object_edit) {
                        material_hash = stl->g_data->hair_material_hash;
 
                        for (ModifierData *md = ob->modifiers.first; md; md = 
md->next) {
diff --git a/source/blender/draw/intern/DRW_render.h 
b/source/blender/draw/intern/DRW_render.h
index 8eb10ed5a14..64a907bf385 100644
--- a/source/blender/draw/intern/DRW_render.h
+++ b/source/blender/draw/intern/DRW_render.h
@@ -463,7 +463,7 @@ typedef struct DRWContextState {
        struct Scene *scene;    /* 'CTX_data_scene(C)' */
        struct ViewLayer *view_layer;  /* 'CTX_data_view_layer(C)' */
 
-       /* Use 'scene->obedit' for edit-mode */
+       /* Use 'object_edit' for edit-mode */
        struct Object *obact;   /* 'OBACT' */
 
        struct RenderEngineType *engine_type;
@@ -476,7 +476,11 @@ typedef struct DRWContextState {
         * May be NULL when used for selection or depth buffer. */
        const struct bContext *evil_C;
 
+       /* ---- */
+
+       /* Cache: initialized by 'drw_context_state_init'. */
        struct Object *object_pose;
+       struct Object *object_edit;
 
 } DRWContextState;
 
diff --git a/source/blender/draw/intern/draw_manager.c 
b/source/blender/draw/intern/draw_manager.c
index 45ad9853d20..2669d733558 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -2210,13 +2210,10 @@ struct DRWTextStore *DRW_text_cache_ensure(void)
 
 bool DRW_object_is_renderable(Object *ob)
 {
-       Scene *scene = DST.draw_ctx.scene;
-       Object *obedit = scene->obedit;
-
        BLI_assert(BKE_object_is_visible(ob, 
OB_VISIBILITY_CHECK_UNKNOWN_RENDER_MODE));
 
        if (ob->type == OB_MESH) {
-               if (ob == obedit) {
+               if (ob == DST.draw_ctx.object_edit) {
                        IDProperty *props = 
BKE_layer_collection_engine_evaluated_get(ob, COLLECTION_MODE_EDIT, "");
                        bool do_show_occlude_wire = 
BKE_collection_engine_property_value_get_bool(props, "show_occlude_wire");
                        if (do_show_occlude_wire) {
@@ -2601,6 +2598,30 @@ static void drw_viewport_cache_resize(void)
        DRW_instance_data_list_resize(DST.idatalist);
 }
 
+
+/* Not a viewport variable, we could split this out. */
+static void drw_context_state_init(void)
+{
+       /* Edit object. */
+       if (DST.draw_ctx.object_mode & OB_MODE_EDIT) {
+               DST.draw_ctx.object_edit = DST.draw_ctx.obact;
+       }
+       else {
+               DST.draw_ctx.object_edit = NULL;
+       }
+
+       /* Pose object. */
+       if (DST.draw_ctx.object_mode & OB_MODE_POSE) {
+               DST.draw_ctx.object_pose = DST.draw_ctx.obact;
+       }
+       else if (DST.draw_ctx.object_mode & OB_MODE_WEIGHT_PAINT) {
+               DST.draw_ctx.object_pose = 
BKE_object_pose_armature_get(DST.draw_ctx.obact);
+       }
+       else {
+               DST.draw_ctx.object_pose = NULL;
+       }
+}
+
 /* It also stores viewport variable to an immutable place: DST
  * This is because a cache uniform only store reference
  * to its value. And we don't want to invalidate the cache
@@ -2608,7 +2629,6 @@ static void drw_viewport_cache_resize(void)
 static void drw_viewport_var_init(void)
 {
        RegionView3D *rv3d = DST.draw_ctx.rv3d;
-
        /* Refresh DST.size */
        if (DST.viewport) {
                int size[2];
@@ -2664,8 +2684,8 @@ static void drw_viewport_var_init(void)
        DST.backface = GL_CW;
        glFrontFace(DST.frontface);
 
-       if (DST.draw_ctx.scene->obedit) {
-               ED_view3d_init_mats_rv3d(DST.draw_ctx.scene->obedit, rv3d);
+       if (DST.draw_ctx.object_edit) {
+               ED_view3d_init_mats_rv3d(DST.draw_ctx.object_edit, rv3d);
        }
 
        /* Alloc array of texture reference. */
@@ -2678,19 +2698,6 @@ static void drw_viewport_var_init(void)
 
        memset(viewport_matrix_override.override, 0x0, 
sizeof(viewport_matrix_override.override));
        memset(DST.common_instance_data, 0x0, sizeof(DST.common_instance_data));
-
-       /* Not a viewport variable, we could split this out. */
-       {
-               if (DST.draw_ctx.object_mode & OB_MODE_POSE) {
-                       DST.draw_ctx.object_pose = DST.draw_ctx.obact;
-               }
-               else if (DST.draw_ctx.object_mode & OB_MODE_WEIGHT_PAINT) {
-                       DST.draw_ctx.object_pose = 
BKE_object_pose_armature_get(DST.draw_ctx.obact);
-               }
-               else {
-                       DST.draw_ctx.object_pose = NULL;
-               }
-       }
 }
 
 void DRW_viewport_matrix_get(float mat[4][4], DRWViewportMatrixType type)
@@ -3185,10 +3192,10 @@ static void drw_engines_enable_external(void)
        use_drw_engine(DRW_engine_viewport_external_type.draw_engine);
 }
 
-static void drw_engines_enable(const Scene *scene, ViewLayer *view_layer, 
RenderEngineType *engine_type)
+static void drw_engines_enable(ViewLayer *view_layer, RenderEngineType 
*engine_type)
 {
        Object *obact = OBACT(view_layer);
-       const int mode = CTX_data_mode_enum_ex(scene->obedit, obact, 
DST.draw_ctx.object_mode);
+       const int mode = CTX_data_mode_enum_ex(DST.draw_ctx.object_edit, obact, 
DST.draw_ctx.object_mode);
 
        drw_engines_enable_from_engine(engine_type);
 
@@ -3366,7 +3373,7 @@ void DRW_notify_view_update(const DRWUpdateContext 
*update_ctx)
                NULL,
        };
 
-       drw_engines_enable(scene, view_layer, engine_type);
+       drw_engines_enable(view_layer, engine_type);
 
        for (LinkData *link = DST.enabled_engines.first; link; link = 
link->next) {
                DrawEngineType *draw_engine = link->data;
@@ -3411,7 +3418,7 @@ void DRW_notify_id_update(const DRWUpdateContext 
*update_ctx, ID *id)
        DST.draw_ctx = (DRWContextState){
                ar, rv3d, v3d, scene, view_layer, OBACT(view_layer), 
engine_type, depsgraph, OB_MODE_OBJECT, NULL,
        };
-       drw_engines_enable(scene, view_layer, engine_type);
+       drw_engines_enable(view_layer, engine_type);
        for (LinkData *link = DST.enabled_engines.first; link; link = 
link->next) {
                DrawEngineType *draw_engine = link->data;
                ViewportEngineData *data = 
DRW_viewport_engine_data_ensure(draw_engine);
@@ -3474,11 +3481,11 @@ void DRW_draw_render_loop_ex(
            /* reuse if caller sets */
            DST.draw_ctx.evil_C,
        };
-
+       drw_context_state_init();
        drw_viewport_var_init();
 
        /* Get list of enabled engines */
-       drw_engines_enable(scene, view_layer, engine_type);
+       drw_engines_enable(view_layer, engine_type);
 
        /* Update ubos */
        DRW_globals_update();
@@ -3651,6 +3658,7 @@ void DRW_render_to_image(RenderEngine *re, struct 
Depsgraph *depsgraph)
        DST.draw_ctx = (DRWContextState){
            NULL, NULL, NULL, scene, view_layer, OBACT(view_layer), 
engine_type, depsgraph, eval_ctx->object_mode, NULL,
        };
+       drw_context_state_init();
 
        DST.viewport = GPU_viewport_create();
        const int size[2] = {(r->size * r->xsch) / 100, (r->size * r->ysch) / 
100};
@@ -3723,6 +3731,7 @@ void DRW_draw_select_loop(
        Scene *scene = DEG_get_evaluated_scene(depsgraph);
        RenderEngineType *engine_type = 
RE_engines_find(scene->view_render.engine_id);
        ViewLayer *view_layer = DEG_get_evaluated_view_layer(depsgraph);
+       Object *obact = OBACT(view_layer);
 #ifndef USE_GPU_SELECT
        UNUSED_VARS(vc, scene, view_layer, v3d, ar, rect);
 #else
@@ -3737,14 +3746,12 @@ void DRW_draw_select_loop(
 
        bool use_obedit = false;
        int obedit_mode = 0;
-       if (scene->obedit && scene->obedit->type == OB_MBALL) {
-               use_obedit = true;
-               obedit_mode = CTX_MODE_EDIT_METABALL;
-       }
-       else if ((scene->obedit && scene->obedit->type == OB_ARMATURE)) {
-               /* if not drawing sketch, draw bones */
-               // if (!BDR_drawSketchNames(vc))
-               {
+       if (object_mode & OB_MODE_EDIT) {
+               if (obact->type == OB_MBALL) {
+                       use_obedit = true;
+                       obedit_mode = CTX_MODE_EDIT_METABALL;
+               }
+               else if (obact->type == OB_ARMATURE) {
                        use_obedit = true;
                        obedit_mode = CTX_MODE_EDIT_ARMATURE;
                }
@@ -3773,10 +3780,10 @@ void DRW_draw_select_loop(
 
        /* Instead of 'DRW_context_state_init(C, &DST.draw_ctx)', assign from 
args */
        DST.draw_ctx = (DRWContextState){
-               ar, rv3d, v3d, scene, view_layer, OBACT(view_layer), 
engine_type, depsgraph, object_mode,
+               ar, rv3d, v3d, scene, view_layer, obact, engine_type, 
depsgraph, object_mode,
                (bContext *)NULL,
        };
-
+       drw_context_state_init();
        drw_viewport_var_init();
 
        /* Update ubos */
@@ -3792,7 +3799,7 @@ void DRW_draw_select_loop(
                drw_engines_cache_init();
 
                if (use_obedit) {
-                       drw_engines_cache_populate(scene->obedit);
+                       drw_engines_cache_populate(obact);
                }
                else {
                        DEG_OBJECT_ITER(depsgraph, ob, DRW_iterator_mode_get(),
@@ -3876,7 +3883,7 @@ void DRW_draw_depth_loop(
                ar, rv3d, v3d, scene, view_layer, OBACT(view_layer), 
engine_type, depsgraph, object_mode,
                (bContext *)NULL,
        };
-
+       drw_context_state_init();
        drw_viewport_var_init();
 
        /* Update ubos */
diff --git a/source/blender/draw/modes/edit_curve_mode.c 
b/source/blender/draw/modes/edit_curve_mode.c
index 54a1bd79572..73a4fb1e9e6 100644
--- a/source/blender/draw/modes/edit_curve_mode.c
+++ b/source/blender/draw/modes/edit_curve_mode.c
@@ -229,12 +229,11 @@ static void EDIT_CURVE_cache_populate(void *vedata, 
Object *ob)
        EDIT_CURVE_StorageList *stl = ((EDIT_CURVE_Data *)vedata)->stl;
        const DRWContextState *draw_ctx = DRW_context_state_get();
        const Scene *scene = draw_ctx->scene;
-       const Object *obedit = scene->obedit;
 
        UNUSED_VARS(psl, stl);
 
        if (ob->type == OB_CURVE) {
-               if (ob == obedit) {
+               if (ob == draw_ctx->object_edit) {
                        Curve *cu = ob->data;
                        /* Get geometry cache */
                        struct Gwn_Batch *geom;
diff --git a/source/blender/draw/modes/edit_lattice_mode.

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