diff options
-rw-r--r-- | source/blender/editors/render/render_internal.c | 10 | ||||
-rw-r--r-- | source/blender/editors/render/render_update.c | 21 | ||||
-rw-r--r-- | source/blender/windowmanager/WM_api.h | 1 | ||||
-rw-r--r-- | source/blender/windowmanager/intern/wm_event_system.c | 6 | ||||
-rw-r--r-- | source/blender/windowmanager/intern/wm_jobs.c | 4 |
5 files changed, 24 insertions, 18 deletions
diff --git a/source/blender/editors/render/render_internal.c b/source/blender/editors/render/render_internal.c index 954fff42a37..541512a7cbb 100644 --- a/source/blender/editors/render/render_internal.c +++ b/source/blender/editors/render/render_internal.c @@ -47,6 +47,7 @@ #include "BKE_blender.h" #include "BKE_context.h" +#include "BKE_depsgraph.h" #include "BKE_freestyle.h" #include "BKE_global.h" #include "BKE_image.h" @@ -926,7 +927,6 @@ static void render_view3d_do(RenderEngine *engine, const bContext *C, int keep_d if (CTX_wm_window(C) == NULL) { engine->flag |= RE_ENGINE_DO_UPDATE; - return; } @@ -962,7 +962,7 @@ static void render_view3d_do(RenderEngine *engine, const bContext *C, int keep_d /* callback for render engine , on changes */ void render_view3d(RenderEngine *engine, const bContext *C) -{ +{ render_view3d_do(engine, C, 0); } @@ -986,8 +986,12 @@ static int render_view3d_changed(RenderEngine *engine, const bContext *C) float clipsta, clipend; bool orth; - if (engine->update_flag == RE_ENGINE_UPDATE_MA) + if (engine->update_flag & RE_ENGINE_UPDATE_MA) update |= PR_UPDATE_MATERIAL; + + if (engine->update_flag & RE_ENGINE_UPDATE_OTHER) + update |= PR_UPDATE_MATERIAL; + engine->update_flag = 0; if (engine->resolution_x != ar->winx || engine->resolution_y != ar->winy) diff --git a/source/blender/editors/render/render_update.c b/source/blender/editors/render/render_update.c index 5653d14e590..6a4d99d2535 100644 --- a/source/blender/editors/render/render_update.c +++ b/source/blender/editors/render/render_update.c @@ -41,6 +41,7 @@ #include "DNA_space_types.h" #include "DNA_view3d_types.h" #include "DNA_world_types.h" +#include "DNA_windowmanager_types.h" #include "BLI_threads.h" #include "BLI_utildefines.h" @@ -78,11 +79,14 @@ void ED_render_scene_update(Main *bmain, Scene *scene, int updated) /* viewport rendering update on data changes, happens after depsgraph * updates if there was any change. context is set to the 3d view */ bContext *C; - bScreen *sc; - ScrArea *sa; - ARegion *ar; + wmWindowManager *wm; + wmWindow *win; static int recursive_check = FALSE; + /* why do this function then? :) */ + if (updated == 0) + return; + /* don't do this render engine update if we're updating the scene from * other threads doing e.g. rendering or baking jobs */ if (!BLI_thread_is_main()) @@ -99,8 +103,15 @@ void ED_render_scene_update(Main *bmain, Scene *scene, int updated) CTX_data_scene_set(C, scene); CTX_wm_manager_set(C, bmain->wm.first); - - for (sc = bmain->screen.first; sc; sc = sc->id.next) { + wm = bmain->wm.first; + + for (win = wm->windows.first; win; win = win->next) { + bScreen *sc = win->screen; + ScrArea *sa; + ARegion *ar; + + CTX_wm_window_set(C, win); + for (sa = sc->areabase.first; sa; sa = sa->next) { if (sa->spacetype != SPACE_VIEW3D) continue; diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h index 9830dcb9e9f..4e485ebfd63 100644 --- a/source/blender/windowmanager/WM_api.h +++ b/source/blender/windowmanager/WM_api.h @@ -170,7 +170,6 @@ struct wmEventHandler *WM_event_add_dropbox_handler(ListBase *handlers, ListBase /* mouse */ void WM_event_add_mousemove(struct bContext *C); -void WM_event_add_mousemove_window(struct wmWindow *window); int WM_modal_tweak_exit(const struct wmEvent *event, int tweak_event); /* notifiers */ diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c index 03a1785541e..3a29685d059 100644 --- a/source/blender/windowmanager/intern/wm_event_system.c +++ b/source/blender/windowmanager/intern/wm_event_system.c @@ -2255,7 +2255,7 @@ void wm_event_do_handlers(bContext *C) /* only add mousemove when queue was read entirely */ if (win->addmousemove && win->eventstate) { wmEvent tevent = *(win->eventstate); - //printf("adding MOUSEMOVE %d %d\n", tevent.x, tevent.y); + // printf("adding MOUSEMOVE %d %d\n", tevent.x, tevent.y); tevent.type = MOUSEMOVE; tevent.prevx = tevent.x; tevent.prevy = tevent.y; @@ -2540,10 +2540,6 @@ void WM_event_add_mousemove(bContext *C) window->addmousemove = 1; } -void WM_event_add_mousemove_window(wmWindow *window) -{ - window->addmousemove = 1; -} /* for modal callbacks, check configuration for how to interpret exit with tweaks */ int WM_modal_tweak_exit(const wmEvent *event, int tweak_event) diff --git a/source/blender/windowmanager/intern/wm_jobs.c b/source/blender/windowmanager/intern/wm_jobs.c index c637b77738e..03af5e9e8a6 100644 --- a/source/blender/windowmanager/intern/wm_jobs.c +++ b/source/blender/windowmanager/intern/wm_jobs.c @@ -529,10 +529,6 @@ void wm_jobs_timer(const bContext *C, wmWindowManager *wm, wmTimer *wt) WM_event_add_notifier(C, NC_WM | ND_JOB, NULL); - /* so the info header updates on job end even if the mouse doesn't move. - * a rather annoying/obscure bug, see [#32537] (second reply) */ - WM_event_add_mousemove_window(wm_job->win); - /* new job added for wm_job? */ if (wm_job->customdata) { // printf("job restarted with new data %s\n", wm_job->name); |