remove for bad-level-call & some minor changes to make camera switching neater.

This commit is contained in:
Campbell Barton 2010-03-09 07:41:04 +00:00
parent 9c513346a5
commit d4756d395b
9 changed files with 48 additions and 43 deletions

@ -66,7 +66,8 @@ void unlink_scene(struct Main *bmain, struct Scene *sce, struct Scene *newsce);
int next_object(struct Scene *scene, int val, struct Base **base, struct Object **ob);
struct Object *scene_find_camera(struct Scene *sc);
struct Object *scene_find_camera_switch(struct Scene *scene); // DURIAN_CAMERA_SWITCH
struct Object *scene_camera_switch_find(struct Scene *scene); // DURIAN_CAMERA_SWITCH
int scene_camera_switch_update(struct Scene *scene);
char *scene_find_marker_name(struct Scene *scene, int frame);
char *scene_find_last_marker_name(struct Scene *scene, int frame);

@ -233,6 +233,10 @@ struct Sequence *sequencer_add_image_strip(struct bContext *C, ListBase *seqbase
struct Sequence *sequencer_add_sound_strip(struct bContext *C, ListBase *seqbasep, struct SeqLoadInfo *seq_load);
struct Sequence *sequencer_add_movie_strip(struct bContext *C, ListBase *seqbasep, struct SeqLoadInfo *seq_load);
/* view3d draw callback, run when not in background view */
typedef struct ImBuf *(*SequencerDrawView)(struct Scene *, int, int);
extern SequencerDrawView sequencer_view3d_cb;
/* copy/paste */
extern ListBase seqbase_clipboard;
extern int seqbase_clipboard_frame;

@ -722,7 +722,7 @@ Object *scene_find_camera(Scene *sc)
}
#ifdef DURIAN_CAMERA_SWITCH
Object *scene_find_camera_switch(Scene *scene)
Object *scene_camera_switch_find(Scene *scene)
{
TimeMarker *m;
int cfra = scene->r.cfra;
@ -743,6 +743,18 @@ Object *scene_find_camera_switch(Scene *scene)
}
#endif
int scene_camera_switch_update(Scene *scene)
{
#ifdef DURIAN_CAMERA_SWITCH
Object *camera= scene_camera_switch_find(scene);
if(camera) {
scene->camera= camera;
return 1;
}
#endif
return 0;
}
char *scene_find_marker_name(Scene *scene, int frame)
{
ListBase *markers= &scene->markers;

@ -81,7 +81,7 @@ static int seqrecty= 0;
#define SELECT 1
ListBase seqbase_clipboard;
int seqbase_clipboard_frame;
void *sequencer_view3d_cb= NULL; /* NULL in background mode */
SequencerDrawView sequencer_view3d_cb= NULL; /* NULL in background mode */
void printf_strip(Sequence *seq)
@ -1940,8 +1940,6 @@ static void check_limiter_refcount_comp(const char * func, TStripElem *se)
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)
{
@ -2160,16 +2158,12 @@ static void do_build_seq_ibuf(Scene *scene, Sequence * seq, TStripElem *se, int
seq->scene->r.cfra= frame;
if(G.background==0 && (seq->flag & SEQ_USE_SCENE_OPENGL) && have_seq==0) {
if(sequencer_view3d_cb && (seq->flag & SEQ_USE_SCENE_OPENGL) && have_seq==0) {
/* opengl offscreen render */
#ifdef DURIAN_CAMERA_SWITCH
Object *camera= scene_find_camera_switch(seq->scene);
if(camera)
seq->scene->camera= camera;
#endif
scene_camera_switch_update(seq->scene);
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
se->ibuf= sequencer_view3d_cb(seq->scene, seqrectx, seqrecty);
}
else {
RenderResult rres;

@ -30,28 +30,30 @@
/* ********* exports for space_view3d/ module ********** */
struct ARegion;
struct BoundBox;
struct View3D;
struct RegionView3D;
struct ViewContext;
struct bglMats;
struct BPoint;
struct Nurb;
struct bContext;
struct BezTriple;
struct EditVert;
struct bglMats;
struct BoundBox;
struct BPoint;
struct EditEdge;
struct EditFace;
struct EditVert;
struct ImBuf;
struct Scene;
struct bContext;
struct Main;
struct Nurb;
struct Object;
struct rcti;
struct RegionView3D;
struct Scene;
struct View3D;
struct ViewContext;
/* for derivedmesh drawing callbacks, for view3d_select, .... */
typedef struct ViewContext {
Scene *scene;
Object *obact;
Object *obedit;
struct Object *obact;
struct Object *obedit;
struct ARegion *ar;
struct View3D *v3d;
struct RegionView3D *rv3d;

@ -292,10 +292,8 @@ static int screen_opengl_render_anim_step(bContext *C, wmOperator *op)
if(oglrender->rv3d->persp==RV3D_CAMOB && oglrender->v3d->camera && oglrender->v3d->scenelock) {
/* since scene_update_for_newframe() is used rather
* then ED_update_for_newframe() the camera needs to be set */
Object *camera= scene_find_camera_switch(scene);
if(camera)
oglrender->v3d->camera= scene->camera= camera;
if(scene_camera_switch_update(scene))
oglrender->v3d->camera= scene->camera;
}
/* render into offscreen buffer */

@ -1715,7 +1715,7 @@ void ED_update_for_newframe(const bContext *C, int mute)
Scene *scene= CTX_data_scene(C);
#ifdef DURIAN_CAMERA_SWITCH
void *camera= scene_find_camera_switch(scene);
void *camera= scene_camera_switch_find(scene);
if(camera && scene->camera != camera) {
if(camera && scene->camera && (camera != scene->camera)) {

@ -29,36 +29,29 @@
#include <string.h>
#include <stdio.h>
#include "DNA_object_types.h"
#include "DNA_space_types.h"
#include "DNA_scene_types.h"
#include "DNA_screen_types.h"
#include "MEM_guardedalloc.h"
#include "BLI_blenlib.h"
#include "BLI_math.h"
#include "BLI_rand.h"
#include "BKE_colortools.h"
#include "BKE_context.h"
#include "BKE_screen.h"
#include "BKE_sequencer.h"
#include "BKE_global.h"
#include "ED_space_api.h"
#include "ED_screen.h"
#include "BIF_gl.h"
#include "ED_view3d.h" /* only for sequencer view3d drawing callback */
#include "WM_api.h"
#include "WM_types.h"
#include "UI_interface.h"
#include "UI_resources.h"
#include "UI_view2d.h"
#include "ED_markers.h"
#include "sequencer_intern.h" // own include
/* ******************** manage regions ********************* */
@ -540,5 +533,10 @@ void ED_spacetype_sequencer(void)
BLI_addhead(&st->regiontypes, art);
BKE_spacetype_register(st);
/* set the sequencer callback when not in background mode */
if(G.background==0) {
sequencer_view3d_cb= ED_view3d_draw_offscreen_imbuf_simple;
}
}

@ -2584,11 +2584,7 @@ static void do_render_seq(Render * re)
/* main loop: doing sequence + fields + blur + 3d render + compositing */
static void do_render_all_options(Render *re)
{
#ifdef DURIAN_CAMERA_SWITCH
Object *camera= scene_find_camera_switch(re->scene);
if(camera)
re->scene->camera= camera;
#endif
scene_camera_switch_update(re->scene);
re->i.starttime= PIL_check_seconds_timer();