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:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2011-11-28 18:55:35 +0400
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2011-11-28 18:55:35 +0400
commit7baaa08211d91a721c7909c5f87f72bd22f12ad6 (patch)
tree861499e6f010813b1379ee64b8f02053f16b79ee /source/blender/editors/render/render_update.c
parent9f3c921957124d65aa0d2cbc4ad2aacb56411670 (diff)
Fix #29389: cycles viewport render not updating on frame changes. This sort of
worked by accident before, because of flags that weren't cleared properly. Now moved the call to update render engines into scene_update_* itself.
Diffstat (limited to 'source/blender/editors/render/render_update.c')
-rw-r--r--source/blender/editors/render/render_update.c58
1 files changed, 19 insertions, 39 deletions
diff --git a/source/blender/editors/render/render_update.c b/source/blender/editors/render/render_update.c
index f353a090305..d921308aad5 100644
--- a/source/blender/editors/render/render_update.c
+++ b/source/blender/editors/render/render_update.c
@@ -41,6 +41,7 @@
#include "DNA_view3d_types.h"
#include "DNA_world_types.h"
+#include "BLI_threads.h"
#include "BLI_utildefines.h"
#include "BKE_context.h"
@@ -65,13 +66,25 @@
/***************************** Render Engines ********************************/
-void ED_render_engine_update_tagged(bContext *C, Main *bmain)
+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 */
- bScreen *sc, *prev_sc= CTX_wm_screen(C);
- ScrArea *sa, *prev_sa= CTX_wm_area(C);
- ARegion *ar, *prev_ar= CTX_wm_region(C);
+ bContext *C;
+ bScreen *sc;
+ ScrArea *sa;
+ ARegion *ar;
+
+ /* 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())
+ return;
+
+ C= CTX_create();
+ CTX_data_main_set(C, bmain);
+ CTX_data_scene_set(C, scene);
+
+ CTX_wm_manager_set(C, bmain->wm.first);
for(sc=bmain->screen.first; sc; sc=sc->id.next) {
for(sa=sc->areabase.first; sa; sa=sa->next) {
@@ -88,7 +101,7 @@ void ED_render_engine_update_tagged(bContext *C, Main *bmain)
rv3d= ar->regiondata;
engine= rv3d->render_engine;
- if(engine && (engine->flag & RE_ENGINE_DO_UPDATE)) {
+ if(engine && (updated || (engine->flag & RE_ENGINE_DO_UPDATE))) {
CTX_wm_screen_set(C, sc);
CTX_wm_area_set(C, sa);
CTX_wm_region_set(C, ar);
@@ -100,9 +113,7 @@ void ED_render_engine_update_tagged(bContext *C, Main *bmain)
}
}
- CTX_wm_screen_set(C, prev_sc);
- CTX_wm_area_set(C, prev_sa);
- CTX_wm_region_set(C, prev_ar);
+ CTX_free(C);
}
void ED_render_engine_changed(Main *bmain)
@@ -134,32 +145,6 @@ void ED_render_engine_changed(Main *bmain)
}
}
-static void tag_render_engines(Main *bmain)
-{
- /* tag running render engines for update later on */
- bScreen *sc;
- ScrArea *sa;
- ARegion *ar;
-
- for(sc=bmain->screen.first; sc; sc=sc->id.next) {
- for(sa=sc->areabase.first; sa; sa=sa->next) {
- if(sa->spacetype != SPACE_VIEW3D)
- continue;
-
- for(ar=sa->regionbase.first; ar; ar=ar->next) {
- RegionView3D *rv3d;
-
- if(ar->regiontype != RGN_TYPE_WINDOW)
- continue;
-
- rv3d= ar->regiondata;
- if(rv3d->render_engine)
- rv3d->render_engine->flag |= RE_ENGINE_DO_UPDATE;
- }
- }
- }
-}
-
/***************************** Updates ***********************************
* ED_render_id_flush_update gets called from DAG_id_tag_update, to do *
* editor level updates when the ID changes. when these ID blocks are in *
@@ -357,11 +342,6 @@ static void scene_changed(Main *bmain, Scene *UNUSED(scene))
void ED_render_id_flush_update(Main *bmain, ID *id)
{
- if(!id) {
- tag_render_engines(bmain);
- return;
- }
-
switch(GS(id->name)) {
case ID_MA:
material_changed(bmain, (Material*)id);