From ee4676a6e5953a250e1949fe4708514dd7438f22 Mon Sep 17 00:00:00 2001 From: Richard Antalik Date: Fri, 27 Sep 2024 18:41:26 +0200 Subject: [PATCH] Fix #127479: VSE produces blank scene offscreen renders If conditions are not met for offscreen rendering, render job is used as fallback. This can be skipped if there is possibility of race condition. This was only considered for case where `context->for_render` was false, since this indicates that call is invoked by the job itself. If scene strip display is set to `OB_RENDER`, it needs to start the render job. So variable `do_seq_gl` was renamed to `is_preview` and reused in race avoidance connditon. This was done to convey clearer meaning and match comments. This change does make code less safe - race is avoided by UI not allowing to run F12 render and opengl render at the same time. However, I don't think, this could be easily resolved on VSE side without suspending thread or being able to run multiple render jobs. Pull Request: https://projects.blender.org/blender/blender/pulls/127926 --- source/blender/sequencer/intern/render.cc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/blender/sequencer/intern/render.cc b/source/blender/sequencer/intern/render.cc index adf684f5d27..05390a05262 100644 --- a/source/blender/sequencer/intern/render.cc +++ b/source/blender/sequencer/intern/render.cc @@ -1522,8 +1522,7 @@ static ImBuf *seq_render_scene_strip(const SeqRenderData *context, */ const bool is_rendering = G.is_rendering; - bool do_seq_gl = !context->for_render && (context->scene->r.seq_prev_type) != OB_RENDER && - BLI_thread_is_main(); + bool is_preview = !context->for_render && (context->scene->r.seq_prev_type) != OB_RENDER; bool have_comp = false; bool use_gpencil = true; @@ -1590,7 +1589,7 @@ static ImBuf *seq_render_scene_strip(const SeqRenderData *context, is_frame_update = (orig_data.timeline_frame != scene->r.cfra) || (orig_data.subframe != scene->r.subframe); - if (sequencer_view3d_fn && do_seq_gl && camera) { + if (sequencer_view3d_fn && is_preview && camera && BLI_thread_is_main()) { char err_out[256] = "unknown"; int width, height; BKE_render_resolution(&scene->r, false, &width, &height); @@ -1646,7 +1645,8 @@ static ImBuf *seq_render_scene_strip(const SeqRenderData *context, * When rendering from command line renderer is called from main thread, in this * case it's always safe to render scene here */ - if (!context->for_render && (is_rendering && !G.background)) { + + if (is_preview && (is_rendering && !G.background)) { goto finally; }