forked from bartvdbraak/blender
remove for bad-level-call & some minor changes to make camera switching neater.
This commit is contained in:
parent
9c513346a5
commit
d4756d395b
@ -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();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user