Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source/blender/draw/engines/clay/clay_engine.c6
-rw-r--r--source/blender/draw/engines/eevee/eevee_materials.c2
-rw-r--r--source/blender/draw/intern/DRW_render.h6
-rw-r--r--source/blender/draw/intern/draw_manager.c83
-rw-r--r--source/blender/draw/modes/edit_curve_mode.c3
-rw-r--r--source/blender/draw/modes/edit_lattice_mode.c4
-rw-r--r--source/blender/draw/modes/edit_mesh_mode.c3
-rw-r--r--source/blender/draw/modes/edit_metaball_mode.c4
-rw-r--r--source/blender/draw/modes/edit_text_mode.c4
-rw-r--r--source/blender/draw/modes/object_mode.c16
10 files changed, 62 insertions, 69 deletions
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.c b/source/blender/draw/modes/edit_lattice_mode.c
index e676677ff97..0268f4eb453 100644
--- a/source/blender/draw/modes/edit_lattice_mode.c
+++ b/source/blender/draw/modes/edit_lattice_mode.c
@@ -188,13 +188,11 @@ static void EDIT_LATTICE_cache_populate(void *vedata, Object *ob)
EDIT_LATTICE_PassList *psl = ((EDIT_LATTICE_Data *)vedata)->psl;
EDIT_LATTICE_StorageList *stl = ((EDIT_LATTICE_Data *)vedata)->stl;
const DRWContextState *draw_ctx = DRW_context_state_get();
- Scene *scene = draw_ctx->scene;
- Object *obedit = scene->obedit;
UNUSED_VARS(psl);
if (ob->type == OB_LATTICE) {
- if (ob == obedit) {
+ if (ob == draw_ctx->object_edit) {
/* Get geometry cache */
struct Gwn_Batch *geom;
diff --git a/source/blender/draw/modes/edit_mesh_mode.c b/source/blender/draw/modes/edit_mesh_mode.c
index 29ba658f79d..cc1373dc29f 100644
--- a/source/blender/draw/modes/edit_mesh_mode.c
+++ b/source/blender/draw/modes/edit_mesh_mode.c
@@ -443,11 +443,10 @@ static void EDIT_MESH_cache_populate(void *vedata, Object *ob)
const DRWContextState *draw_ctx = DRW_context_state_get();
View3D *v3d = draw_ctx->v3d;
Scene *scene = draw_ctx->scene;
- Object *obedit = scene->obedit;
struct Gwn_Batch *geom;
if (ob->type == OB_MESH) {
- if (ob == obedit) {
+ if (ob == draw_ctx->object_edit) {
const Mesh *me = ob->data;
IDProperty *ces_mode_ed = BKE_layer_collection_engine_evaluated_get(ob, COLLECTION_MODE_EDIT, "");
bool do_occlude_wire = BKE_collection_engine_property_value_get_bool(ces_mode_ed, "show_occlude_wire");
diff --git a/source/blender/draw/modes/edit_metaball_mode.c b/source/blender/draw/modes/edit_metaball_mode.c
index 78ceaf8b6f1..b759dce5931 100644
--- a/source/blender/draw/modes/edit_metaball_mode.c
+++ b/source/blender/draw/modes/edit_metaball_mode.c
@@ -169,11 +169,9 @@ static void EDIT_METABALL_cache_populate(void *vedata, Object *ob)
if (ob->type == OB_MBALL) {
const DRWContextState *draw_ctx = DRW_context_state_get();
- Scene *scene = draw_ctx->scene;
- Object *obedit = scene->obedit;
DRWShadingGroup *group = stl->g_data->group;
- if (ob == obedit) {
+ if (ob == draw_ctx->object_edit) {
MetaBall *mb = ob->data;
const bool is_select = DRW_state_is_select();
diff --git a/source/blender/draw/modes/edit_text_mode.c b/source/blender/draw/modes/edit_text_mode.c
index 60f28d89f4b..43c4a356279 100644
--- a/source/blender/draw/modes/edit_text_mode.c
+++ b/source/blender/draw/modes/edit_text_mode.c
@@ -190,13 +190,11 @@ static void EDIT_TEXT_cache_populate(void *vedata, Object *ob)
EDIT_TEXT_PassList *psl = ((EDIT_TEXT_Data *)vedata)->psl;
EDIT_TEXT_StorageList *stl = ((EDIT_TEXT_Data *)vedata)->stl;
const DRWContextState *draw_ctx = DRW_context_state_get();
- Scene *scene = draw_ctx->scene;
- Object *obedit = scene->obedit;
UNUSED_VARS(psl, stl);
if (ob->type == OB_FONT) {
- if (ob == obedit) {
+ if (ob == draw_ctx->object_edit) {
const Curve *cu = ob->data;
/* Get geometry cache */
struct Gwn_Batch *geom;
diff --git a/source/blender/draw/modes/object_mode.c b/source/blender/draw/modes/object_mode.c
index e807be34633..7ed81366341 100644
--- a/source/blender/draw/modes/object_mode.c
+++ b/source/blender/draw/modes/object_mode.c
@@ -1790,7 +1790,6 @@ static void OBJECT_cache_populate(void *vedata, Object *ob)
OBJECT_PassList *psl = ((OBJECT_Data *)vedata)->psl;
OBJECT_StorageList *stl = ((OBJECT_Data *)vedata)->stl;
const DRWContextState *draw_ctx = DRW_context_state_get();
- Scene *scene = draw_ctx->scene;
ViewLayer *view_layer = draw_ctx->view_layer;
View3D *v3d = draw_ctx->v3d;
int theme_id = TH_UNDEFINED;
@@ -1810,8 +1809,7 @@ static void OBJECT_cache_populate(void *vedata, Object *ob)
bool do_outlines = ((ob->base_flag & BASE_SELECTED) != 0);
if (do_outlines) {
- Object *obedit = scene->obedit;
- if (ob != obedit && !((ob == draw_ctx->obact) && (draw_ctx->object_mode & OB_MODE_ALL_PAINT))) {
+ if ((ob != draw_ctx->object_edit) && !((ob == draw_ctx->obact) && (draw_ctx->object_mode & OB_MODE_ALL_PAINT))) {
struct Gwn_Batch *geom = DRW_cache_object_surface_get(ob);
if (geom) {
theme_id = DRW_object_wire_theme_get(ob, view_layer, NULL);
@@ -1828,8 +1826,7 @@ static void OBJECT_cache_populate(void *vedata, Object *ob)
{
Mesh *me = ob->data;
if (me->totpoly == 0) {
- Object *obedit = scene->obedit;
- if (ob != obedit) {
+ if (ob != draw_ctx->object_edit) {
struct Gwn_Batch *geom = DRW_cache_mesh_edges_get(ob);
if (geom) {
if (theme_id == TH_UNDEFINED) {
@@ -1847,8 +1844,7 @@ static void OBJECT_cache_populate(void *vedata, Object *ob)
break;
case OB_LATTICE:
{
- Object *obedit = scene->obedit;
- if (ob != obedit) {
+ if (ob != draw_ctx->object_edit) {
struct Gwn_Batch *geom = DRW_cache_lattice_wire_get(ob, false);
if (theme_id == TH_UNDEFINED) {
theme_id = DRW_object_wire_theme_get(ob, view_layer, NULL);
@@ -1862,8 +1858,7 @@ static void OBJECT_cache_populate(void *vedata, Object *ob)
case OB_CURVE:
{
- Object *obedit = scene->obedit;
- if (ob != obedit) {
+ if (ob != draw_ctx->object_edit) {
struct Gwn_Batch *geom = DRW_cache_curve_edge_wire_get(ob);
if (theme_id == TH_UNDEFINED) {
theme_id = DRW_object_wire_theme_get(ob, view_layer, NULL);
@@ -1875,8 +1870,7 @@ static void OBJECT_cache_populate(void *vedata, Object *ob)
}
case OB_MBALL:
{
- Object *obedit = scene->obedit;
- if (ob != obedit) {
+ if (ob != draw_ctx->object_edit) {
DRW_shgroup_mball_helpers(stl, ob, view_layer);
}
break;