Fix #33253: VSE preview doesn't display compositor
authorSergey Sharybin <sergey.vfx@gmail.com>
Wed, 21 Nov 2012 09:36:36 +0000 (09:36 +0000)
committerSergey Sharybin <sergey.vfx@gmail.com>
Wed, 21 Nov 2012 09:36:36 +0000 (09:36 +0000)
There were two issues in scene strip rendering:

- It will skip rendering if scene doesn't have camera but uses compositor
- G.is_break will cancel preview rendering

Also removed Use Sequencer from scene's strip settings, it's not supported.

release/scripts/startup/bl_ui/space_sequencer.py
source/blender/blenkernel/intern/sequencer.c
source/blender/editors/space_sequencer/sequencer_draw.c
source/blender/makesrna/intern/rna_scene.c

index ad4074d..fdfd431 100644 (file)
@@ -707,8 +707,6 @@ class SEQUENCER_PT_scene(SequencerButtonsPanel, Panel):
         layout.template_ID(strip, "scene")
 
         scene = strip.scene
-        if scene:
-            layout.prop(scene.render, "use_sequencer")
 
         layout.label(text="Camera Override")
         layout.template_ID(strip, "scene_camera")
index 547ca96..4493b5c 100644 (file)
@@ -2343,6 +2343,7 @@ static ImBuf *seq_render_scene_strip(SeqRenderData context, Sequence *seq, float
                    (context.scene->r.seq_flag & R_SEQ_GL_PREV);
        int do_seq;
        int have_seq = FALSE;
+       int have_comp = FALSE;
        Scene *scene;
        int is_thread_main = BLI_thread_is_main();
 
@@ -2355,6 +2356,7 @@ static ImBuf *seq_render_scene_strip(SeqRenderData context, Sequence *seq, float
        frame = scene->r.sfra + nr + seq->anim_startofs;
 
        have_seq = (scene->r.scemode & R_DOSEQ) && scene->ed && scene->ed->seqbase.first;
+       have_comp = (scene->r.scemode & R_DOCOMP) && scene->use_nodes && scene->nodetree;
 
        oldcfra = scene->r.cfra;
        scene->r.cfra = frame;
@@ -2367,7 +2369,7 @@ static ImBuf *seq_render_scene_strip(SeqRenderData context, Sequence *seq, float
                camera = scene->camera;
        }
 
-       if (have_seq == FALSE && camera == NULL) {
+       if (have_comp == FALSE && camera == NULL) {
                scene->r.cfra = oldcfra;
                return NULL;
        }
index 37e57a1..5fefafa 100644 (file)
@@ -822,6 +822,7 @@ ImBuf *sequencer_ibuf_get(struct Main *bmain, Scene *scene, SpaceSeq *sseq, int
        int rectx, recty;
        float render_size = 0.0;
        float proxy_size = 100.0;
+       short is_break = G.is_break;
 
        render_size = sseq->render_size;
        if (render_size == 0) {
@@ -840,6 +841,11 @@ ImBuf *sequencer_ibuf_get(struct Main *bmain, Scene *scene, SpaceSeq *sseq, int
 
        context = BKE_sequencer_new_render_data(bmain, scene, rectx, recty, proxy_size);
 
+       /* sequencer could start rendering, in this case we need to be sure it wouldn't be canceled
+        * by Esc pressed somewhere in the past
+        */
+       G.is_break = FALSE;
+
        if (special_seq_update)
                ibuf = BKE_sequencer_give_ibuf_direct(context, cfra + frame_ofs, special_seq_update);
        else if (!U.prefetchframes) // XXX || (G.f & G_PLAYANIM) == 0) {
@@ -847,6 +853,9 @@ ImBuf *sequencer_ibuf_get(struct Main *bmain, Scene *scene, SpaceSeq *sseq, int
        else
                ibuf = BKE_sequencer_give_ibuf_threaded(context, cfra + frame_ofs, sseq->chanshown);
 
+       /* restore state so real rendering would be canceled (if needed) */
+       G.is_break = is_break;
+
        return ibuf;
 }
 
index cd82e79..eba454d 100644 (file)
@@ -3961,6 +3961,7 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
        prop = RNA_def_property(srna, "use_sequencer_gl_preview", PROP_BOOLEAN, PROP_NONE);
        RNA_def_property_boolean_sdna(prop, NULL, "seq_flag", R_SEQ_GL_PREV);
        RNA_def_property_ui_text(prop, "Sequencer OpenGL", "");
+       RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_SceneSequencer_update");
 
 #if 0  /* see R_SEQ_GL_REND comment */
        prop = RNA_def_property(srna, "use_sequencer_gl_render", PROP_BOOLEAN, PROP_NONE);