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:
Diffstat (limited to 'source/blender/windowmanager/intern')
-rw-r--r--source/blender/windowmanager/intern/wm_draw.c41
-rw-r--r--source/blender/windowmanager/intern/wm_event_system.c8
2 files changed, 38 insertions, 11 deletions
diff --git a/source/blender/windowmanager/intern/wm_draw.c b/source/blender/windowmanager/intern/wm_draw.c
index 8261198ef78..389049d9e59 100644
--- a/source/blender/windowmanager/intern/wm_draw.c
+++ b/source/blender/windowmanager/intern/wm_draw.c
@@ -55,6 +55,8 @@
#include "GPU_draw.h"
#include "GPU_extensions.h"
+#include "RE_engine.h"
+
#include "WM_api.h"
#include "WM_types.h"
#include "wm.h"
@@ -113,6 +115,19 @@ static int wm_area_test_invalid_backbuf(ScrArea *sa)
return 1;
}
+static void wm_region_test_render_do_draw(ScrArea *sa, ARegion *ar)
+{
+ if(sa->spacetype == SPACE_VIEW3D) {
+ RegionView3D *rv3d = ar->regiondata;
+ RenderEngine *engine = (rv3d)? rv3d->render_engine: NULL;
+
+ if(engine && (engine->flag & RE_ENGINE_DO_DRAW)) {
+ ar->do_draw = 1;
+ engine->flag &= ~RE_ENGINE_DO_DRAW;
+ }
+ }
+}
+
/********************** draw all **************************/
/* - reference method, draw all each time */
@@ -205,7 +220,7 @@ static void wm_method_draw_overlap_all(bContext *C, wmWindow *win, int exchange)
for(sa= screen->areabase.first; sa; sa= sa->next)
for(ar= sa->regionbase.first; ar; ar= ar->next)
if(ar->swinid && !wm_area_test_invalid_backbuf(sa))
- ED_region_tag_redraw(ar);
+ ED_region_tag_redraw(ar);
/* flush overlapping regions */
if(screen->regionbase.first) {
@@ -662,13 +677,28 @@ static int wm_draw_update_test_window(wmWindow *win)
{
ScrArea *sa;
ARegion *ar;
+ int do_draw= 0;
for(ar= win->screen->regionbase.first; ar; ar= ar->next) {
if(ar->do_draw_overlay) {
wm_tag_redraw_overlay(win, ar);
ar->do_draw_overlay= 0;
}
+ if(ar->swinid && ar->do_draw)
+ do_draw= 1;
+ }
+
+ for(sa= win->screen->areabase.first; sa; sa= sa->next) {
+ for(ar=sa->regionbase.first; ar; ar= ar->next) {
+ wm_region_test_render_do_draw(sa, ar);
+
+ if(ar->swinid && ar->do_draw)
+ do_draw = 1;
+ }
}
+
+ if(do_draw)
+ return 1;
if(win->screen->do_refresh)
return 1;
@@ -681,15 +711,6 @@ static int wm_draw_update_test_window(wmWindow *win)
if(win->screen->do_draw_drag)
return 1;
- for(ar= win->screen->regionbase.first; ar; ar= ar->next)
- if(ar->swinid && ar->do_draw)
- return 1;
-
- for(sa= win->screen->areabase.first; sa; sa= sa->next)
- for(ar=sa->regionbase.first; ar; ar= ar->next)
- if(ar->swinid && ar->do_draw)
- return 1;
-
return 0;
}
diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c
index 65e65450167..03b0d637de1 100644
--- a/source/blender/windowmanager/intern/wm_event_system.c
+++ b/source/blender/windowmanager/intern/wm_event_system.c
@@ -59,6 +59,7 @@
#include "ED_fileselect.h"
#include "ED_info.h"
+#include "ED_render.h"
#include "ED_screen.h"
#include "ED_view3d.h"
#include "ED_util.h"
@@ -311,6 +312,7 @@ void wm_event_do_notifiers(bContext *C)
/* XXX make lock in future, or separated derivedmesh users in scene */
if(!G.rendering) {
/* depsgraph & animation: update tagged datablocks */
+ Main *bmain = CTX_data_main(C);
/* copied to set's in scene_update_tagged_recursive() */
win->screen->scene->customdata_mask= win_combine_v3d_datamask;
@@ -318,7 +320,11 @@ void wm_event_do_notifiers(bContext *C)
/* XXX, hack so operators can enforce datamasks [#26482], gl render */
win->screen->scene->customdata_mask |= win->screen->scene->customdata_mask_modal;
- scene_update_tagged(CTX_data_main(C), win->screen->scene);
+ scene_update_tagged(bmain, win->screen->scene);
+
+ ED_render_engine_update_tagged(C, bmain);
+
+ scene_clear_tagged(bmain, win->screen->scene);
}
}