[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [27340] trunk/blender: option to use offscreen opengl drawing with the sequencer scene strips.
Campbell Barton
ideasman42 at gmail.com
Mon Mar 8 22:33:51 CET 2010
Revision: 27340
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=27340
Author: campbellbarton
Date: 2010-03-08 22:33:51 +0100 (Mon, 08 Mar 2010)
Log Message:
-----------
option to use offscreen opengl drawing with the sequencer scene strips.
warning, uses bad level call, will need to resolve very very soon!
Modified Paths:
--------------
trunk/blender/release/scripts/ui/space_sequencer.py
trunk/blender/source/blender/blenkernel/intern/screen.c
trunk/blender/source/blender/blenkernel/intern/sequencer.c
trunk/blender/source/blender/editors/include/ED_view3d.h
trunk/blender/source/blender/editors/sculpt_paint/paint_image.c
trunk/blender/source/blender/editors/space_sequencer/sequencer_draw.c
trunk/blender/source/blender/editors/space_view3d/view3d_draw.c
trunk/blender/source/blender/makesdna/DNA_sequence_types.h
trunk/blender/source/blender/makesrna/intern/rna_sequencer.c
Modified: trunk/blender/release/scripts/ui/space_sequencer.py
===================================================================
--- trunk/blender/release/scripts/ui/space_sequencer.py 2010-03-08 20:37:45 UTC (rev 27339)
+++ trunk/blender/release/scripts/ui/space_sequencer.py 2010-03-08 21:33:51 UTC (rev 27340)
@@ -617,6 +617,7 @@
strip = act_strip(context)
layout.template_ID(strip, "scene")
+ layout.prop(strip, "use_opengl")
class SEQUENCER_PT_filter(SequencerButtonsPanel):
Modified: trunk/blender/source/blender/blenkernel/intern/screen.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/screen.c 2010-03-08 20:37:45 UTC (rev 27339)
+++ trunk/blender/source/blender/blenkernel/intern/screen.c 2010-03-08 21:33:51 UTC (rev 27340)
@@ -351,4 +351,3 @@
}
return NULL;
}
-
Modified: trunk/blender/source/blender/blenkernel/intern/sequencer.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/sequencer.c 2010-03-08 20:37:45 UTC (rev 27339)
+++ trunk/blender/source/blender/blenkernel/intern/sequencer.c 2010-03-08 21:33:51 UTC (rev 27340)
@@ -39,6 +39,7 @@
#include "DNA_sequence_types.h"
#include "DNA_scene_types.h"
#include "DNA_anim_types.h"
+#include "DNA_object_types.h"
#include "BKE_global.h"
#include "BKE_image.h"
@@ -46,6 +47,7 @@
#include "BKE_sequencer.h"
#include "BKE_fcurve.h"
#include "BKE_utildefines.h"
+#include "BKE_scene.h"
#include "RNA_access.h"
#include "RE_pipeline.h"
@@ -1938,6 +1940,8 @@
static TStripElem* do_build_seq_array_recursively(Scene *scene,
ListBase *seqbasep, int cfra, int chanshown, int render_size);
+extern ImBuf *ED_view3d_draw_offscreen_imbuf_simple(Scene *scene, int width, int height);
+
static void do_build_seq_ibuf(Scene *scene, Sequence * seq, TStripElem *se, int cfra,
int build_proxy_run, int render_size)
{
@@ -2130,48 +2134,53 @@
if (!sce_valid) {
se->ok = STRIPELEM_FAILED;
- } else if (se->ibuf==NULL && sce_valid) {
- int do_opengl= 0;
- if(do_opengl && have_seq==0 && (sequencer_view3d_cb!=NULL)) {
+ }
+ else if (se->ibuf==NULL && sce_valid) {
+ int frame= seq->sfra + se->nr + seq->anim_startofs;
+ int oldcfra = seq->scene->r.cfra;
+
+ /* Hack! This function can be called from do_render_seq(), in that case
+ the seq->scene can already have a Render initialized with same name,
+ so we have to use a default name. (compositor uses scene name to
+ find render).
+ However, when called from within the UI (image preview in sequencer)
+ we do want to use scene Render, that way the render result is defined
+ for display in render/imagewindow
+
+ Hmm, don't see, why we can't do that all the time,
+ and since G.rendering is uhm, gone... (Peter)
+ */
+
+ int rendering = 1;
+ int doseq;
+
+ /* prevent eternal loop */
+ doseq= scene->r.scemode & R_DOSEQ;
+ scene->r.scemode &= ~R_DOSEQ;
+
+ seq->scene->r.cfra= frame;
+
+ if(G.background==0 && (seq->flag & SEQ_USE_SCENE_OPENGL) && have_seq==0) {
/* opengl offscreen render */
- /* sequencer_view3d_cb */
- // void (*seq_view3d_cb)(Scene *, int, int, int, int)= sequencer_view3d_cb;
-
- // seq_view3d_cb(scene, cfra, render_size, seqrectx, seqrecty);
+#ifdef DURIAN_CAMERA_SWITCH
+ Object *camera= scene_find_camera_switch(seq->scene);
+ if(camera)
+ seq->scene->camera= camera;
+#endif
+ scene_update_for_newframe(seq->scene, seq->scene->lay);
+ se->ibuf= ED_view3d_draw_offscreen_imbuf_simple(seq->scene, seqrectx, seqrecty); // BAD LEVEL CALL! DONT ALLOW THIS FOR MORE THEN A FEW DAYS, USE A CALLBACK!!! - campell
}
else {
RenderResult rres;
- int oldcfra;
- /* Hack! This function can be called from do_render_seq(), in that case
- the seq->scene can already have a Render initialized with same name,
- so we have to use a default name. (compositor uses scene name to
- find render).
- However, when called from within the UI (image preview in sequencer)
- we do want to use scene Render, that way the render result is defined
- for display in render/imagewindow
- Hmm, don't see, why we can't do that all the time,
- and since G.rendering is uhm, gone... (Peter)
- */
-
- int rendering = 1;
- int doseq;
-
- oldcfra = seq->scene->r.cfra;
-
if(rendering)
re= RE_NewRender(" do_build_seq_ibuf", RE_SLOT_DEFAULT);
else
re= RE_NewRender(sce->id.name, RE_SLOT_VIEW);
- /* prevent eternal loop */
- doseq= scene->r.scemode & R_DOSEQ;
- scene->r.scemode &= ~R_DOSEQ;
+ RE_BlenderFrame(re, sce, NULL, frame);
- RE_BlenderFrame(re, sce, NULL,
- seq->sfra+se->nr+seq->anim_startofs);
-
RE_AcquireResultImage(re, &rres);
if(rres.rectf) {
@@ -2189,13 +2198,13 @@
RE_ReleaseResultImage(re);
// BIF_end_render_callbacks();
-
- /* restore */
- scene->r.scemode |= doseq;
+ }
- seq->scene->r.cfra = oldcfra;
- }
+ /* restore */
+ scene->r.scemode |= doseq;
+ seq->scene->r.cfra = oldcfra;
+
copy_to_ibuf_still(seq, se);
if (!build_proxy_run) {
Modified: trunk/blender/source/blender/editors/include/ED_view3d.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_view3d.h 2010-03-08 20:37:45 UTC (rev 27339)
+++ trunk/blender/source/blender/editors/include/ED_view3d.h 2010-03-08 21:33:51 UTC (rev 27340)
@@ -159,6 +159,7 @@
int winx, int winy, float viewmat[][4], float winmat[][4]);
struct ImBuf *ED_view3d_draw_offscreen_imbuf(struct Scene *scene, struct View3D *v3d, struct ARegion *ar, int sizex, int sizey);
+struct ImBuf *ED_view3d_draw_offscreen_imbuf_simple(Scene *scene, int width, int height);
void view3d_clipping_local(struct RegionView3D *rv3d, float mat[][4]);
Modified: trunk/blender/source/blender/editors/sculpt_paint/paint_image.c
===================================================================
--- trunk/blender/source/blender/editors/sculpt_paint/paint_image.c 2010-03-08 20:37:45 UTC (rev 27339)
+++ trunk/blender/source/blender/editors/sculpt_paint/paint_image.c 2010-03-08 21:33:51 UTC (rev 27340)
@@ -5515,7 +5515,7 @@
memcpy(array, rv3d->winmat, sizeof(rv3d->winmat)); array += sizeof(rv3d->winmat)/sizeof(float);
memcpy(array, rv3d->viewmat, sizeof(rv3d->viewmat)); array += sizeof(rv3d->viewmat)/sizeof(float);
orth= project_paint_view_clip(v3d, rv3d, &array[0], &array[1]);
- array[2]= orth ? 1.0f : 0.0f;
+ array[2]= orth ? 1.0f : 0.0f; /* using float for a bool is dodgy but since its an extra member in the array... easier then adding a single bool prop */
IDP_AddToGroup(idgroup, view_data);
Modified: trunk/blender/source/blender/editors/space_sequencer/sequencer_draw.c
===================================================================
--- trunk/blender/source/blender/editors/space_sequencer/sequencer_draw.c 2010-03-08 20:37:45 UTC (rev 27339)
+++ trunk/blender/source/blender/editors/space_sequencer/sequencer_draw.c 2010-03-08 21:33:51 UTC (rev 27340)
@@ -687,6 +687,9 @@
glClearColor(0.0, 0.0, 0.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT);
+ /* without this colors can flicker from previous opengl state */
+ glColor4ub(255, 255, 255, 255);
+
UI_view2d_totRect_set(v2d, viewrectx + 0.5f, viewrecty + 0.5f);
UI_view2d_curRect_validate(v2d);
Modified: trunk/blender/source/blender/editors/space_view3d/view3d_draw.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_draw.c 2010-03-08 20:37:45 UTC (rev 27339)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_draw.c 2010-03-08 21:33:51 UTC (rev 27340)
@@ -2031,6 +2031,8 @@
ar->winy= bwiny;
glPopMatrix();
+
+ glColor4ub(255, 255, 255, 255); // XXX, without this the sequencer flickers with opengl draw enabled, need to find out why - campbell
}
/* utility func for ED_view3d_draw_offscreen */
@@ -2075,6 +2077,47 @@
return ibuf;
}
+/* creates own 3d views, used by the sequencer */
+ImBuf *ED_view3d_draw_offscreen_imbuf_simple(Scene *scene, int width, int height)
+{
+ View3D v3d;
+ ARegion ar;
+ RegionView3D rv3d;
+
+ memset(&v3d, 0, sizeof(v3d));
+ memset(&ar, 0, sizeof(ar));
+ memset(&rv3d, 0, sizeof(rv3d));
+
+ /* connect data */
+ v3d.regionbase.first= v3d.regionbase.last= &ar;
+ ar.regiondata= &rv3d;
+ ar.regiontype= RGN_TYPE_WINDOW;
+
+ v3d.camera= scene->camera;
+ v3d.lay= scene->lay;
+ v3d.drawtype = OB_SOLID; /* should be able to configure */
+
+ rv3d.persp= RV3D_CAMOB;
+
+ copy_m4_m4(rv3d.viewinv, v3d.camera->obmat);
+ normalize_m4(rv3d.viewinv);
+ invert_m4_m4(rv3d.viewmat, rv3d.viewinv);
+
+ {
+ float _yco, _dx, _dy;
+ rctf _viewplane;
+ object_camera_matrix(&scene->r, v3d.camera, width, height, 0, rv3d.winmat, &_viewplane, &v3d.near, &v3d.far, &v3d.lens, &_yco, &_dx, &_dy);
+ }
+
+ mul_m4_m4m4(rv3d.persmat, rv3d.viewmat, rv3d.winmat);
+ invert_m4_m4(rv3d.persinv, rv3d.viewinv);
+
+ return ED_view3d_draw_offscreen_imbuf(scene, &v3d, &ar, width, height);
+
+ // seq_view3d_cb(scene, cfra, render_size, seqrectx, seqrecty);
+}
+
+
/* NOTE: the info that this uses is updated in ED_refresh_viewport_fps(),
* which currently gets called during SCREEN_OT_animation_step.
*/
Modified: trunk/blender/source/blender/makesdna/DNA_sequence_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_sequence_types.h 2010-03-08 20:37:45 UTC (rev 27339)
+++ trunk/blender/source/blender/makesdna/DNA_sequence_types.h 2010-03-08 21:33:51 UTC (rev 27340)
@@ -273,6 +273,8 @@
#define SEQ_USE_PROXY_CUSTOM_FILE 2097152
#define SEQ_USE_EFFECT_DEFAULT_FADE 4194304
+#define SEQ_USE_SCENE_OPENGL 8388608
+
/* deprecated, dont use a flag anymore*/
/*#define SEQ_ACTIVE 1048576*/
Modified: trunk/blender/source/blender/makesrna/intern/rna_sequencer.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_sequencer.c 2010-03-08 20:37:45 UTC (rev 27339)
+++ trunk/blender/source/blender/makesrna/intern/rna_sequencer.c 2010-03-08 21:33:51 UTC (rev 27340)
@@ -920,7 +920,13 @@
RNA_def_property_flag(prop, PROP_EDITABLE);
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list