diff options
author | Jeroen Bakker <j.bakker@atmind.nl> | 2019-05-03 16:48:21 +0300 |
---|---|---|
committer | Jeroen Bakker <j.bakker@atmind.nl> | 2019-05-07 10:26:44 +0300 |
commit | 4d78f5a4a77e71aeb6a7084b64307c9987978dbe (patch) | |
tree | 3848650f15f6172431e70fc99cb666a897434f49 /source | |
parent | 3482aebf8d501a6cf63d95219d628cfb3041de76 (diff) |
DrawManager: External Engines + Overlays
Do not iterate over degsgraph when overlays are turned off and
rendering via an external engine. External engines sync data
from Blender differently. The external engine
draws the depth buffer, but that is only needed for overlays.
Reviewers: fclem, brecht
Differential Revision: https://developer.blender.org/D4791
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/draw/intern/draw_manager.c | 31 |
1 files changed, 17 insertions, 14 deletions
diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c index d7208bd0616..afda1b5d7e4 100644 --- a/source/blender/draw/intern/draw_manager.c +++ b/source/blender/draw/intern/draw_manager.c @@ -1558,22 +1558,25 @@ void DRW_draw_render_loop_ex(struct Depsgraph *depsgraph, drw_engines_cache_init(); drw_engines_world_update(scene); - const int object_type_exclude_viewport = v3d->object_type_exclude_viewport; - const int iter_flag = DEG_ITER_OBJECT_FLAG_LINKED_DIRECTLY | - DEG_ITER_OBJECT_FLAG_LINKED_VIA_SET | DEG_ITER_OBJECT_FLAG_VISIBLE | - DEG_ITER_OBJECT_FLAG_DUPLI; - DEG_OBJECT_ITER_BEGIN (depsgraph, ob, iter_flag) { - if ((object_type_exclude_viewport & (1 << ob->type)) != 0) { - continue; - } - if (v3d->localvd && ((v3d->local_view_uuid & ob->base_local_view_bits) == 0)) { - continue; + /* Only iterate over objects for internal engines or when overlays are enabled */ + if ((engine_type->flag & RE_INTERNAL) != 0 || (v3d->flag2 & V3D_HIDE_OVERLAYS) == 0) { + const int object_type_exclude_viewport = v3d->object_type_exclude_viewport; + const int iter_flag = DEG_ITER_OBJECT_FLAG_LINKED_DIRECTLY | + DEG_ITER_OBJECT_FLAG_LINKED_VIA_SET | DEG_ITER_OBJECT_FLAG_VISIBLE | + DEG_ITER_OBJECT_FLAG_DUPLI; + DEG_OBJECT_ITER_BEGIN (depsgraph, ob, iter_flag) { + if ((object_type_exclude_viewport & (1 << ob->type)) != 0) { + continue; + } + if (v3d->localvd && ((v3d->local_view_uuid & ob->base_local_view_bits) == 0)) { + continue; + } + DST.dupli_parent = data_.dupli_parent; + DST.dupli_source = data_.dupli_object_current; + drw_engines_cache_populate(ob); } - DST.dupli_parent = data_.dupli_parent; - DST.dupli_source = data_.dupli_object_current; - drw_engines_cache_populate(ob); + DEG_OBJECT_ITER_END; } - DEG_OBJECT_ITER_END; drw_engines_cache_finish(); |