forked from bartvdbraak/blender
Fix T36474: Blender 2.68a crashes upon rendering
Summary: Original issue was caused by wring detection of whether SS modifier is being applied for render/viewport. After recent dependency graph commit this was no longer an issue. But it still might have happen conflict between viewport draw and scene_update_for_newframe() invoked from render thread when using external engines like Cycles. Solved by adding viewport lock while scene is being updated and objects being exported to the render engine. Same lock was already used for Blender Internal. Reviewers: brecht Reviewed By: brecht Maniphest Tasks: T36474 Differential Revision: https://developer.blender.org/D138
This commit is contained in:
parent
8632aab88d
commit
602dcb47b0
@ -423,6 +423,11 @@ int RE_engine_render(Render *re, int do_all)
|
|||||||
if (!do_all && (type->flag & RE_USE_POSTPROCESS))
|
if (!do_all && (type->flag & RE_USE_POSTPROCESS))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
/* Lock drawing in UI during data phase. */
|
||||||
|
if (re->draw_lock) {
|
||||||
|
re->draw_lock(re->dlh, 1);
|
||||||
|
}
|
||||||
|
|
||||||
/* update animation here so any render layer animation is applied before
|
/* update animation here so any render layer animation is applied before
|
||||||
* creating the render result */
|
* creating the render result */
|
||||||
if ((re->r.scemode & (R_NO_FRAME_UPDATE | R_BUTS_PREVIEW)) == 0) {
|
if ((re->r.scemode & (R_NO_FRAME_UPDATE | R_BUTS_PREVIEW)) == 0) {
|
||||||
@ -476,8 +481,13 @@ int RE_engine_render(Render *re, int do_all)
|
|||||||
}
|
}
|
||||||
BLI_rw_mutex_unlock(&re->resultmutex);
|
BLI_rw_mutex_unlock(&re->resultmutex);
|
||||||
|
|
||||||
if (re->result == NULL)
|
if (re->result == NULL) {
|
||||||
|
/* Clear UI drawing locks. */
|
||||||
|
if (re->draw_lock) {
|
||||||
|
re->draw_lock(re->dlh, 0);
|
||||||
|
}
|
||||||
return 1;
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
/* set render info */
|
/* set render info */
|
||||||
re->i.cfra = re->scene->r.cfra;
|
re->i.cfra = re->scene->r.cfra;
|
||||||
@ -516,6 +526,11 @@ int RE_engine_render(Render *re, int do_all)
|
|||||||
if (type->update)
|
if (type->update)
|
||||||
type->update(engine, re->main, re->scene);
|
type->update(engine, re->main, re->scene);
|
||||||
|
|
||||||
|
/* Clear UI drawing locks. */
|
||||||
|
if (re->draw_lock) {
|
||||||
|
re->draw_lock(re->dlh, 0);
|
||||||
|
}
|
||||||
|
|
||||||
if (type->render)
|
if (type->render)
|
||||||
type->render(engine, re->scene);
|
type->render(engine, re->scene);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user