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
path: root/source
diff options
context:
space:
mode:
authorJeroen Bakker <j.bakker@atmind.nl>2019-05-03 16:48:21 +0300
committerJeroen Bakker <j.bakker@atmind.nl>2019-05-07 10:26:44 +0300
commit4d78f5a4a77e71aeb6a7084b64307c9987978dbe (patch)
tree3848650f15f6172431e70fc99cb666a897434f49 /source
parent3482aebf8d501a6cf63d95219d628cfb3041de76 (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.c31
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();