[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [51534] trunk/blender/source/blender: Fix #32941: Sequencer Preview shows texture which is apart of the window.

Sergey Sharybin sergey.vfx at gmail.com
Tue Oct 23 14:25:08 CEST 2012


Revision: 51534
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=51534
Author:   nazgul
Date:     2012-10-23 12:25:08 +0000 (Tue, 23 Oct 2012)
Log Message:
-----------
Fix #32941: Sequencer Preview shows texture which is apart of the window.

Issue was caused by buffer shadows were binding buffer after offscreen buffers
was bind which lead to some unpredictable results.

Made it so ED_view3d_draw_offscreen wouldn't bind any buffers and for proper
shadows ED_view3d_draw_offscreen_init should be manually be called before
drawing to an offscreen.

This should also make open gl render with AA enabled a bit faster.

Also fixed missing sequencer cache invalidation when open gl render type is
changing.

Material and Rendered modes are still a TODO for sequencer.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/include/ED_view3d.h
    trunk/blender/source/blender/editors/render/render_opengl.c
    trunk/blender/source/blender/editors/space_view3d/view3d_draw.c
    trunk/blender/source/blender/makesrna/intern/rna_scene.c

Modified: trunk/blender/source/blender/editors/include/ED_view3d.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_view3d.h	2012-10-23 11:47:23 UTC (rev 51533)
+++ trunk/blender/source/blender/editors/include/ED_view3d.h	2012-10-23 12:25:08 UTC (rev 51534)
@@ -263,6 +263,7 @@
 int ED_view3d_scene_layer_set(int lay, const int *values, int *active);
 
 int ED_view3d_context_activate(struct bContext *C);
+void ED_view3d_draw_offscreen_init(struct Scene *scene, struct View3D *v3d);
 void ED_view3d_draw_offscreen(struct Scene *scene, struct View3D *v3d, struct ARegion *ar,
                               int winx, int winy, float viewmat[][4], float winmat[][4], int do_bgpic, int colormanage_background);
 

Modified: trunk/blender/source/blender/editors/render/render_opengl.c
===================================================================
--- trunk/blender/source/blender/editors/render/render_opengl.c	2012-10-23 11:47:23 UTC (rev 51533)
+++ trunk/blender/source/blender/editors/render/render_opengl.c	2012-10-23 12:25:08 UTC (rev 51534)
@@ -171,6 +171,8 @@
 		}
 	}
 	else if (view_context) {
+		ED_view3d_draw_offscreen_init(scene, v3d);
+
 		GPU_offscreen_bind(oglrender->ofs); /* bind */
 
 		/* render 3d view */

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_draw.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_draw.c	2012-10-23 11:47:23 UTC (rev 51533)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_draw.c	2012-10-23 12:25:08 UTC (rev 51534)
@@ -2371,6 +2371,7 @@
 		mult_m4_m4m4(rv3d.persmat, rv3d.winmat, rv3d.viewmat);
 		invert_m4_m4(rv3d.persinv, rv3d.viewinv);
 
+		/* no need to call ED_view3d_draw_offscreen_init since shadow buffers were already updated */
 		ED_view3d_draw_offscreen(scene, v3d, &ar, winsize, winsize, viewmat, winmat, FALSE, FALSE);
 		GPU_lamp_shadow_buffer_unbind(shadow->lamp);
 		
@@ -2508,6 +2509,16 @@
 	glLoadMatrixf(rv3d->viewmat);
 }
 
+void ED_view3d_draw_offscreen_init(Scene *scene, View3D *v3d)
+{
+	/* shadow buffers, before we setup matrices */
+	if (draw_glsl_material(scene, NULL, v3d, v3d->drawtype))
+		gpu_update_lamps_shadows(scene, v3d);
+}
+
+/* ED_view3d_draw_offscreen_init should be called before this to initialize
+ * stuff like shadow buffers
+ */
 void ED_view3d_draw_offscreen(Scene *scene, View3D *v3d, ARegion *ar,
                               int winx, int winy, float viewmat[][4], float winmat[][4],
                               int do_bgpic, int colormanage_background)
@@ -2541,10 +2552,6 @@
 	/* free images which can have changed on frame-change
 	 * warning! can be slow so only free animated images - campbell */
 	GPU_free_images_anim();
-	
-	/* shadow buffers, before we setup matrices */
-	if (draw_glsl_material(scene, NULL, v3d, v3d->drawtype))
-		gpu_update_lamps_shadows(scene, v3d);
 
 	/* set background color, fallback on the view background color
 	 * (if active clip is set but frame is failed to load fallback to horizon color as background) */
@@ -2687,6 +2694,8 @@
 	if (ofs == NULL)
 		return NULL;
 
+	ED_view3d_draw_offscreen_init(scene, v3d);
+
 	GPU_offscreen_bind(ofs);
 
 	/* render 3d view */

Modified: trunk/blender/source/blender/makesrna/intern/rna_scene.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_scene.c	2012-10-23 11:47:23 UTC (rev 51533)
+++ trunk/blender/source/blender/makesrna/intern/rna_scene.c	2012-10-23 12:25:08 UTC (rev 51534)
@@ -1414,6 +1414,12 @@
 		DAG_id_tag_update(&camera->id, 0);
 }
 
+static void rna_SceneSequencer_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *UNUSED(ptr))
+{
+	BKE_sequencer_cache_cleanup();
+	BKE_sequencer_preprocessed_cache_cleanup();
+}
+
 #else
 
 static void rna_def_transform_orientation(BlenderRNA *brna)
@@ -3948,6 +3954,7 @@
 	RNA_def_property_enum_sdna(prop, NULL, "seq_prev_type");
 	RNA_def_property_enum_items(prop, viewport_shade_items);
 	RNA_def_property_ui_text(prop, "Sequencer Preview Shading", "Method to draw in the sequencer view");
+	RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_SceneSequencer_update");
 
 	prop = RNA_def_property(srna, "sequencer_gl_render", PROP_ENUM, PROP_NONE);
 	RNA_def_property_enum_sdna(prop, NULL, "seq_rend_type");




More information about the Bf-blender-cvs mailing list