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