Brought back the Scene strip in Sequencer. Even does a full composite with
only images input in compositor. Currently still renders in the scene's own resolution. It also doesn't show scanline/tile updates yet while rendering.
This commit is contained in:
@@ -693,13 +693,13 @@ Render *RE_NewRender(const char *name)
|
|||||||
|
|
||||||
/* only one render per name exists */
|
/* only one render per name exists */
|
||||||
re= RE_GetRender(name);
|
re= RE_GetRender(name);
|
||||||
if(re)
|
if(re==NULL) {
|
||||||
return re;
|
|
||||||
|
|
||||||
/* new render data struct */
|
/* new render data struct */
|
||||||
re= MEM_callocT(sizeof(Render), "new render");
|
re= MEM_callocT(sizeof(Render), "new render");
|
||||||
BLI_addtail(&RenderList, re);
|
BLI_addtail(&RenderList, re);
|
||||||
strncpy(re->name, name, RE_MAXNAME);
|
strncpy(re->name, name, RE_MAXNAME);
|
||||||
|
}
|
||||||
|
|
||||||
/* set default empty callbacks */
|
/* set default empty callbacks */
|
||||||
re->display_init= result_nothing;
|
re->display_init= result_nothing;
|
||||||
@@ -1507,10 +1507,14 @@ void RE_BlenderFrame(Render *re, Scene *scene, int frame)
|
|||||||
/* is also set by caller renderwin.c */
|
/* is also set by caller renderwin.c */
|
||||||
G.rendering= 1;
|
G.rendering= 1;
|
||||||
|
|
||||||
|
scene->r.cfra= frame;
|
||||||
|
|
||||||
if(render_initialize_from_scene(re, scene)) {
|
if(render_initialize_from_scene(re, scene)) {
|
||||||
do_render_final(re);
|
do_render_final(re);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* UGLY WARNING */
|
||||||
|
G.rendering= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void do_write_image_or_movie(Render *re, Scene *scene, bMovieHandle *mh)
|
static void do_write_image_or_movie(Render *re, Scene *scene, bMovieHandle *mh)
|
||||||
@@ -1627,6 +1631,9 @@ void RE_BlenderAnim(Render *re, Scene *scene, int sfra, int efra)
|
|||||||
mh->end_movie();
|
mh->end_movie();
|
||||||
|
|
||||||
scene->r.cfra= cfrao;
|
scene->r.cfra= cfrao;
|
||||||
|
|
||||||
|
/* UGLY WARNING */
|
||||||
|
G.rendering= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* note; repeated win/disprect calc... solve that nicer, also in compo */
|
/* note; repeated win/disprect calc... solve that nicer, also in compo */
|
||||||
|
|||||||
@@ -1060,7 +1060,8 @@ static void do_render(int anim)
|
|||||||
unsigned int lay= G.scene->lay;
|
unsigned int lay= G.scene->lay;
|
||||||
int scemode= G.scene->r.scemode;
|
int scemode= G.scene->r.scemode;
|
||||||
|
|
||||||
/* we set this flag to prevent renderwindow queue to execute another render */
|
/* UGLY! we set this flag to prevent renderwindow queue to execute another render */
|
||||||
|
/* is reset in RE_BlenderFrame */
|
||||||
G.rendering= 1;
|
G.rendering= 1;
|
||||||
G.afbreek= 0;
|
G.afbreek= 0;
|
||||||
|
|
||||||
@@ -1112,9 +1113,6 @@ static void do_render(int anim)
|
|||||||
// }
|
// }
|
||||||
allqueue(REDRAWBUTSSCENE, 0); // visualize fbuf for example
|
allqueue(REDRAWBUTSSCENE, 0); // visualize fbuf for example
|
||||||
|
|
||||||
// before scene update!
|
|
||||||
G.rendering= 0;
|
|
||||||
|
|
||||||
scene_update_for_newframe(G.scene, G.scene->lay); // no redraw needed, this restores to view as we left it
|
scene_update_for_newframe(G.scene, G.scene->lay); // no redraw needed, this restores to view as we left it
|
||||||
|
|
||||||
waitcursor(0);
|
waitcursor(0);
|
||||||
|
|||||||
@@ -45,22 +45,23 @@
|
|||||||
#include "DNA_sequence_types.h"
|
#include "DNA_sequence_types.h"
|
||||||
#include "DNA_view3d_types.h"
|
#include "DNA_view3d_types.h"
|
||||||
|
|
||||||
#include "BKE_utildefines.h"
|
|
||||||
#include "BKE_global.h"
|
#include "BKE_global.h"
|
||||||
#include "BKE_texture.h"
|
|
||||||
#include "BKE_image.h"
|
#include "BKE_image.h"
|
||||||
|
#include "BKE_ipo.h"
|
||||||
#include "BKE_main.h"
|
#include "BKE_main.h"
|
||||||
#include "BKE_scene.h"
|
#include "BKE_scene.h"
|
||||||
#include "BKE_ipo.h"
|
#include "BKE_texture.h"
|
||||||
|
#include "BKE_utildefines.h"
|
||||||
|
|
||||||
|
#include "BIF_editsound.h"
|
||||||
|
#include "BIF_editseq.h"
|
||||||
#include "BSE_filesel.h"
|
#include "BSE_filesel.h"
|
||||||
#include "BIF_interface.h"
|
|
||||||
#include "BSE_headerbuttons.h"
|
#include "BSE_headerbuttons.h"
|
||||||
|
#include "BIF_interface.h"
|
||||||
|
#include "BIF_renderwin.h"
|
||||||
#include "BIF_screen.h"
|
#include "BIF_screen.h"
|
||||||
#include "BIF_space.h"
|
#include "BIF_space.h"
|
||||||
#include "BIF_toolbox.h"
|
#include "BIF_toolbox.h"
|
||||||
#include "BIF_editsound.h"
|
|
||||||
#include "BIF_editseq.h"
|
|
||||||
|
|
||||||
#include "BSE_sequence.h"
|
#include "BSE_sequence.h"
|
||||||
#include "BSE_seqeffects.h"
|
#include "BSE_seqeffects.h"
|
||||||
@@ -886,73 +887,37 @@ static void do_build_seq_ibuf(Sequence * seq, int cfra)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(seq->type==SEQ_SCENE && se->ibuf==0 && seq->scene) { // scene can be NULL after deletions
|
else if(seq->type==SEQ_SCENE && se->ibuf==0 && seq->scene) { // scene can be NULL after deletions
|
||||||
printf("Sorry, sequence scene is not yet back...\n");
|
Scene *sce= seq->scene, *oldsce= G.scene;
|
||||||
#if 0
|
Render *re= RE_NewRender(sce->id.name);
|
||||||
View3D *vd;
|
RenderResult rres;
|
||||||
Scene *oldsce;
|
int doseq;
|
||||||
unsigned int *rectot;
|
|
||||||
int oldcfra, doseq;
|
|
||||||
int redisplay= (!G.background && !G.rendering);
|
|
||||||
|
|
||||||
oldsce= G.scene;
|
|
||||||
if(seq->scene!=G.scene) set_scene_bg(seq->scene);
|
|
||||||
|
|
||||||
/* prevent eternal loop */
|
|
||||||
doseq= G.scene->r.scemode & R_DOSEQ;
|
|
||||||
G.scene->r.scemode &= ~R_DOSEQ;
|
|
||||||
|
|
||||||
/* store Current FRAme */
|
|
||||||
oldcfra= CFRA;
|
|
||||||
|
|
||||||
CFRA= ( seq->sfra + se->nr );
|
|
||||||
|
|
||||||
waitcursor(1);
|
waitcursor(1);
|
||||||
|
|
||||||
rectot= R.rectot; R.rectot= NULL;
|
/* prevent eternal loop */
|
||||||
oldx= R.rectx; oldy= R.recty;
|
doseq= sce->r.scemode & R_DOSEQ;
|
||||||
/* needed because current 3D window cannot define the layers, like in a background render */
|
sce->r.scemode &= ~R_DOSEQ;
|
||||||
vd= G.vd;
|
|
||||||
G.vd= NULL;
|
|
||||||
|
|
||||||
RE_initrender(NULL);
|
/* hrms, set_scene still needed? work on that... */
|
||||||
if (redisplay) {
|
set_scene_bg(sce);
|
||||||
mainwindow_make_active();
|
RE_BlenderFrame(re, sce, seq->sfra + se->nr);
|
||||||
if(R.r.mode & R_FIELDS) update_for_newframe_muted();
|
set_scene_bg(oldsce);
|
||||||
R.flag= 0;
|
|
||||||
|
|
||||||
free_filesel_spec(G.scene->r.pic);
|
RE_GetResultImage(re, &rres);
|
||||||
|
|
||||||
|
if(rres.rectf) {
|
||||||
|
se->ibuf= IMB_allocImBuf(rres.rectx, rres.recty, 32, IB_rectfloat, 0);
|
||||||
|
memcpy(se->ibuf->rect_float, rres.rectf, 4*sizeof(float)*rres.rectx*rres.recty);
|
||||||
|
if(rres.rectz) {
|
||||||
|
/* not yet */
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
se->ibuf= IMB_allocImBuf(R.rectx, R.recty, 32, IB_rect, 0);
|
/* restore */
|
||||||
if(R.rectot) memcpy(se->ibuf->rect, R.rectot, 4*R.rectx*R.recty);
|
sce->r.scemode |= doseq;
|
||||||
if(R.rectz) {
|
|
||||||
se->ibuf->zbuf= (int *)R.rectz;
|
|
||||||
/* make sure ibuf frees it */
|
|
||||||
se->ibuf->mall |= IB_zbuf;
|
|
||||||
R.rectz= NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* and restore */
|
if((G.f & G_PLAYANIM)==0) /* bad, is set on do_render_seq */
|
||||||
G.vd= vd;
|
waitcursor(0);
|
||||||
|
|
||||||
if((G.f & G_PLAYANIM)==0) waitcursor(0);
|
|
||||||
CFRA= oldcfra;
|
|
||||||
if(R.rectot) MEM_freeN(R.rectot);
|
|
||||||
R.rectot= rectot;
|
|
||||||
R.rectx=oldx; R.recty=oldy;
|
|
||||||
G.scene->r.scemode |= doseq;
|
|
||||||
if(seq->scene!=oldsce) set_scene_bg(oldsce); /* set_scene does full dep updates */
|
|
||||||
|
|
||||||
/* restore!! */
|
|
||||||
R.rectx= seqrectx;
|
|
||||||
R.recty= seqrecty;
|
|
||||||
|
|
||||||
/* added because this flag is checked for
|
|
||||||
* movie writing when rendering an anim.
|
|
||||||
* very convoluted. fix. -zr
|
|
||||||
*/
|
|
||||||
R.r.imtype= G.scene->r.imtype;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* size test */
|
/* size test */
|
||||||
|
|||||||
Reference in New Issue
Block a user