add back support for rendering local view camera.
This commit is contained in:
parent
9b1e70140d
commit
abcdf9573a
@ -1948,7 +1948,7 @@ static ImBuf * seq_render_scene_strip_impl(
|
||||
if(re==NULL)
|
||||
re= RE_NewRender(sce->id.name);
|
||||
|
||||
RE_BlenderFrame(re, context.bmain, sce, NULL, sce->lay, frame, FALSE);
|
||||
RE_BlenderFrame(re, context.bmain, sce, NULL, NULL, sce->lay, frame, FALSE);
|
||||
|
||||
/* restore previous state after it was toggled on & off by RE_BlenderFrame */
|
||||
G.rendering = rendering;
|
||||
|
@ -421,6 +421,7 @@ static int screen_render_exec(bContext *C, wmOperator *op)
|
||||
unsigned int lay= (v3d)? v3d->lay: scene->lay;
|
||||
const short is_animation= RNA_boolean_get(op->ptr, "animation");
|
||||
const short is_write_still= RNA_boolean_get(op->ptr, "write_still");
|
||||
struct Object *camera_override= v3d ? V3D_CAMERA_LOCAL(v3d) : NULL;
|
||||
|
||||
if(!is_animation && is_write_still && BKE_imtype_is_movie(scene->r.imtype)) {
|
||||
BKE_report(op->reports, RPT_ERROR, "Can't write a single file with an animation format selected.");
|
||||
@ -446,9 +447,9 @@ static int screen_render_exec(bContext *C, wmOperator *op)
|
||||
seq_stripelem_cache_cleanup();
|
||||
|
||||
if(is_animation)
|
||||
RE_BlenderAnim(re, mainp, scene, lay, scene->r.sfra, scene->r.efra, scene->r.frame_step, op->reports);
|
||||
RE_BlenderAnim(re, mainp, scene, camera_override, lay, scene->r.sfra, scene->r.efra, scene->r.frame_step, op->reports);
|
||||
else
|
||||
RE_BlenderFrame(re, mainp, scene, NULL, lay, scene->r.cfra, is_write_still);
|
||||
RE_BlenderFrame(re, mainp, scene, NULL, camera_override, lay, scene->r.cfra, is_write_still);
|
||||
|
||||
// no redraw needed, we leave state as we entered it
|
||||
ED_update_for_newframe(mainp, scene, CTX_wm_screen(C), 1);
|
||||
@ -464,6 +465,7 @@ typedef struct RenderJob {
|
||||
Render *re;
|
||||
wmWindow *win;
|
||||
SceneRenderLayer *srl;
|
||||
struct Object *camera_override;
|
||||
int lay;
|
||||
short anim, write_still;
|
||||
Image *image;
|
||||
@ -590,9 +592,9 @@ static void render_startjob(void *rjv, short *stop, short *do_update, float *pro
|
||||
rj->progress= progress;
|
||||
|
||||
if(rj->anim)
|
||||
RE_BlenderAnim(rj->re, rj->main, rj->scene, rj->lay, rj->scene->r.sfra, rj->scene->r.efra, rj->scene->r.frame_step, rj->reports);
|
||||
RE_BlenderAnim(rj->re, rj->main, rj->scene, rj->camera_override, rj->lay, rj->scene->r.sfra, rj->scene->r.efra, rj->scene->r.frame_step, rj->reports);
|
||||
else
|
||||
RE_BlenderFrame(rj->re, rj->main, rj->scene, rj->srl, rj->lay, rj->scene->r.cfra, rj->write_still);
|
||||
RE_BlenderFrame(rj->re, rj->main, rj->scene, rj->srl, rj->camera_override, rj->lay, rj->scene->r.cfra, rj->write_still);
|
||||
}
|
||||
|
||||
static void render_endjob(void *rjv)
|
||||
@ -679,12 +681,13 @@ static int screen_render_invoke(bContext *C, wmOperator *op, wmEvent *event)
|
||||
int jobflag;
|
||||
const short is_animation= RNA_boolean_get(op->ptr, "animation");
|
||||
const short is_write_still= RNA_boolean_get(op->ptr, "write_still");
|
||||
struct Object *camera_override= v3d ? V3D_CAMERA_LOCAL(v3d) : NULL;
|
||||
|
||||
/* only one render job at a time */
|
||||
if(WM_jobs_test(CTX_wm_manager(C), scene))
|
||||
return OPERATOR_CANCELLED;
|
||||
|
||||
if(!RE_is_rendering_allowed(scene, op->reports, render_error_reports)) {
|
||||
if(!RE_is_rendering_allowed(scene, camera_override, op->reports, render_error_reports)) {
|
||||
return OPERATOR_CANCELLED;
|
||||
}
|
||||
|
||||
@ -761,6 +764,7 @@ static int screen_render_invoke(bContext *C, wmOperator *op, wmEvent *event)
|
||||
rj->scene= scene;
|
||||
rj->win= CTX_wm_window(C);
|
||||
rj->srl = srl;
|
||||
rj->camera_override = camera_override;
|
||||
rj->lay = (v3d)? v3d->lay: scene->lay;
|
||||
rj->anim= is_animation;
|
||||
rj->write_still= is_write_still && !is_animation;
|
||||
|
@ -191,6 +191,7 @@ void RE_InitState (struct Render *re, struct Render *source, struct RenderData *
|
||||
void RE_SetDispRect (struct Render *re, rcti *disprect);
|
||||
|
||||
/* set up the viewplane/perspective matrix, three choices */
|
||||
struct Object *RE_GetCamera(struct Render *re); /* return camera override if set */
|
||||
void RE_SetCamera(struct Render *re, struct Object *camera);
|
||||
void RE_SetWindow (struct Render *re, rctf *viewplane, float clipsta, float clipend);
|
||||
void RE_SetOrtho (struct Render *re, rctf *viewplane, float clipsta, float clipend);
|
||||
@ -216,8 +217,8 @@ void RE_init_threadcount(Render *re);
|
||||
void RE_TileProcessor(struct Render *re);
|
||||
|
||||
/* only RE_NewRender() needed, main Blender render calls */
|
||||
void RE_BlenderFrame(struct Render *re, struct Main *bmain, struct Scene *scene, struct SceneRenderLayer *srl, unsigned int lay, int frame, const short write_still);
|
||||
void RE_BlenderAnim(struct Render *re, struct Main *bmain, struct Scene *scene, unsigned int lay, int sfra, int efra, int tfra, struct ReportList *reports);
|
||||
void RE_BlenderFrame(struct Render *re, struct Main *bmain, struct Scene *scene, struct SceneRenderLayer *srl, struct Object *camera_override, unsigned int lay, int frame, const short write_still);
|
||||
void RE_BlenderAnim(struct Render *re, struct Main *bmain, struct Scene *scene, struct Object *camera_override, unsigned int lay, int sfra, int efra, int tfra, struct ReportList *reports);
|
||||
|
||||
/* main preview render call */
|
||||
void RE_PreviewRender(struct Render *re, struct Main *bmain, struct Scene *scene);
|
||||
@ -305,7 +306,7 @@ void RE_engine_update_stats(RenderEngine *engine, const char *stats, const char
|
||||
void RE_engines_init(void);
|
||||
void RE_engines_exit(void);
|
||||
|
||||
int RE_is_rendering_allowed(struct Scene *scene, void *erh, void (*error)(void *handle, const char *str));
|
||||
int RE_is_rendering_allowed(struct Scene *scene, struct Object *camera_override, void *erh, void (*error)(void *handle, const char *str));
|
||||
|
||||
#endif /* RE_PIPELINE_H */
|
||||
|
||||
|
@ -182,6 +182,7 @@ struct Render
|
||||
Scene *scene;
|
||||
RenderData r;
|
||||
World wrld;
|
||||
struct Object *camera_override;
|
||||
unsigned int lay;
|
||||
|
||||
ListBase parts;
|
||||
|
@ -164,7 +164,8 @@ void RE_make_stars(Render *re, Scene *scenev3d, void (*initfunc)(void),
|
||||
World *wrld= NULL;
|
||||
HaloRen *har;
|
||||
Scene *scene;
|
||||
Camera *camera;
|
||||
Object *camera= re ? RE_GetCamera(re) : scene->camera;
|
||||
Camera *cam;
|
||||
double dblrand, hlfrand;
|
||||
float vec[4], fx, fy, fz;
|
||||
float fac, starmindist, clipend;
|
||||
@ -205,11 +206,11 @@ void RE_make_stars(Render *re, Scene *scenev3d, void (*initfunc)(void),
|
||||
* y = -z | +z
|
||||
*/
|
||||
|
||||
if(scene->camera==NULL || scene->camera->type != OB_CAMERA)
|
||||
if(camera==NULL || camera->type != OB_CAMERA)
|
||||
return;
|
||||
|
||||
camera = scene->camera->data;
|
||||
clipend = camera->clipend;
|
||||
cam = camera->data;
|
||||
clipend = cam->clipend;
|
||||
|
||||
/* convert to grid coordinates */
|
||||
|
||||
@ -1676,7 +1677,7 @@ static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem
|
||||
bb.align = part->bb_align;
|
||||
bb.anim = part->bb_anim;
|
||||
bb.lock = part->draw & PART_DRAW_BB_LOCK;
|
||||
bb.ob = (part->bb_ob ? part->bb_ob : re->scene->camera);
|
||||
bb.ob = (part->bb_ob ? part->bb_ob : RE_GetCamera(re));
|
||||
bb.offset[0] = part->bb_offset[0];
|
||||
bb.offset[1] = part->bb_offset[1];
|
||||
bb.split_offset = part->bb_split_offset;
|
||||
@ -4979,6 +4980,7 @@ void RE_Database_FromScene(Render *re, Main *bmain, Scene *scene, unsigned int l
|
||||
Scene *sce;
|
||||
float mat[4][4];
|
||||
float amb[3];
|
||||
Object *camera= RE_GetCamera(re);
|
||||
|
||||
re->main= bmain;
|
||||
re->scene= scene;
|
||||
@ -5008,16 +5010,16 @@ void RE_Database_FromScene(Render *re, Main *bmain, Scene *scene, unsigned int l
|
||||
scene_update_for_newframe(re->main, re->scene, lay);
|
||||
|
||||
/* if no camera, viewmat should have been set! */
|
||||
if(use_camera_view && re->scene->camera) {
|
||||
if(use_camera_view && camera) {
|
||||
/* called before but need to call again incase of lens animation from the
|
||||
* above call to scene_update_for_newframe, fixes bug. [#22702].
|
||||
* following calls dont depend on 'RE_SetCamera' */
|
||||
RE_SetCamera(re, scene->camera);
|
||||
RE_SetCamera(re, camera);
|
||||
|
||||
normalize_m4(re->scene->camera->obmat);
|
||||
invert_m4_m4(mat, re->scene->camera->obmat);
|
||||
normalize_m4(camera->obmat);
|
||||
invert_m4_m4(mat, camera->obmat);
|
||||
RE_SetView(re, mat);
|
||||
re->scene->camera->recalc= OB_RECALC_OB; /* force correct matrix for scaled cameras */
|
||||
camera->recalc= OB_RECALC_OB; /* force correct matrix for scaled cameras */
|
||||
}
|
||||
|
||||
init_render_world(re); /* do first, because of ambient. also requires re->osa set correct */
|
||||
@ -5142,6 +5144,7 @@ void RE_DataBase_GetView(Render *re, float mat[][4])
|
||||
|
||||
static void database_fromscene_vectors(Render *re, Scene *scene, unsigned int lay, int timeoffset)
|
||||
{
|
||||
Object *camera= RE_GetCamera(re);
|
||||
float mat[4][4];
|
||||
|
||||
re->scene= scene;
|
||||
@ -5165,9 +5168,9 @@ static void database_fromscene_vectors(Render *re, Scene *scene, unsigned int la
|
||||
scene_update_for_newframe(re->main, re->scene, lay);
|
||||
|
||||
/* if no camera, viewmat should have been set! */
|
||||
if(re->scene->camera) {
|
||||
normalize_m4(re->scene->camera->obmat);
|
||||
invert_m4_m4(mat, re->scene->camera->obmat);
|
||||
if(camera) {
|
||||
normalize_m4(camera->obmat);
|
||||
invert_m4_m4(mat, camera->obmat);
|
||||
RE_SetView(re, mat);
|
||||
}
|
||||
|
||||
@ -5654,6 +5657,7 @@ void RE_Database_FromScene_Vectors(Render *re, Main *bmain, Scene *sce, unsigned
|
||||
*/
|
||||
void RE_Database_Baking(Render *re, Main *bmain, Scene *scene, unsigned int lay, int type, Object *actob)
|
||||
{
|
||||
Object *camera= RE_GetCamera(re);
|
||||
float mat[4][4];
|
||||
float amb[3];
|
||||
int onlyselected, nolamps;
|
||||
@ -5696,9 +5700,9 @@ void RE_Database_Baking(Render *re, Main *bmain, Scene *scene, unsigned int lay,
|
||||
lay &= 0xFF000000;
|
||||
|
||||
/* if no camera, set unit */
|
||||
if(re->scene->camera) {
|
||||
normalize_m4(re->scene->camera->obmat);
|
||||
invert_m4_m4(mat, re->scene->camera->obmat);
|
||||
if(camera) {
|
||||
normalize_m4(camera->obmat);
|
||||
invert_m4_m4(mat, camera->obmat);
|
||||
RE_SetView(re, mat);
|
||||
}
|
||||
else {
|
||||
@ -5762,13 +5766,17 @@ void RE_make_sticky(Scene *scene, View3D *v3d)
|
||||
Render *re;
|
||||
float ho[4], mat[4][4];
|
||||
int a;
|
||||
|
||||
Object *camera= NULL;
|
||||
|
||||
if(v3d==NULL) {
|
||||
printf("Need a 3d view to make sticky\n");
|
||||
return;
|
||||
}
|
||||
|
||||
if(scene->camera==NULL) {
|
||||
|
||||
if(v3d) camera= V3D_CAMERA_LOCAL(v3d);
|
||||
if(camera == NULL) camera= scene->camera;
|
||||
|
||||
if(camera==NULL) {
|
||||
printf("Need camera to make sticky\n");
|
||||
return;
|
||||
}
|
||||
@ -5781,11 +5789,11 @@ void RE_make_sticky(Scene *scene, View3D *v3d)
|
||||
RE_InitState(re, NULL, &scene->r, NULL, scene->r.xsch, scene->r.ysch, NULL);
|
||||
|
||||
/* use renderdata and camera to set viewplane */
|
||||
RE_SetCamera(re, scene->camera);
|
||||
RE_SetCamera(re, camera);
|
||||
|
||||
/* and set view matrix */
|
||||
normalize_m4(scene->camera->obmat);
|
||||
invert_m4_m4(mat, scene->camera->obmat);
|
||||
normalize_m4(camera->obmat);
|
||||
invert_m4_m4(mat, camera->obmat);
|
||||
RE_SetView(re, mat);
|
||||
|
||||
for(base= FIRSTBASE; base; base= base->next) {
|
||||
|
@ -447,6 +447,11 @@ void make_sample_tables(Render *re)
|
||||
|
||||
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
|
||||
|
||||
struct Object *RE_GetCamera(Render *re)
|
||||
{
|
||||
return re->camera_override ? re->camera_override : re->scene->camera;
|
||||
}
|
||||
|
||||
/* call this after InitState() */
|
||||
/* per render, there's one persistant viewplane. Parts will set their own viewplanes */
|
||||
void RE_SetCamera(Render *re, Object *camera)
|
||||
|
@ -1991,6 +1991,7 @@ static void merge_renderresult_fields(RenderResult *rr, RenderResult *rr1, Rende
|
||||
/* interleaves 2 frames */
|
||||
static void do_render_fields_3d(Render *re)
|
||||
{
|
||||
Object *camera= RE_GetCamera(re);
|
||||
RenderResult *rr1, *rr2= NULL;
|
||||
|
||||
/* no render result was created, we can safely halve render y */
|
||||
@ -2002,7 +2003,7 @@ static void do_render_fields_3d(Render *re)
|
||||
re->i.curfield= 1; /* stats */
|
||||
|
||||
/* first field, we have to call camera routine for correct aspect and subpixel offset */
|
||||
RE_SetCamera(re, re->scene->camera);
|
||||
RE_SetCamera(re, camera);
|
||||
if(re->r.mode & R_MBLUR && (re->r.scemode & R_FULL_SAMPLE)==0)
|
||||
do_render_blur_3d(re);
|
||||
else
|
||||
@ -2022,7 +2023,7 @@ static void do_render_fields_3d(Render *re)
|
||||
if((re->r.mode & R_FIELDSTILL)==0) {
|
||||
re->field_offs = 0.5f;
|
||||
}
|
||||
RE_SetCamera(re, re->scene->camera);
|
||||
RE_SetCamera(re, camera);
|
||||
if(re->r.mode & R_MBLUR && (re->r.scemode & R_FULL_SAMPLE)==0)
|
||||
do_render_blur_3d(re);
|
||||
else
|
||||
@ -2097,8 +2098,9 @@ static void load_backbuffer(Render *re)
|
||||
/* main render routine, no compositing */
|
||||
static void do_render_fields_blur_3d(Render *re)
|
||||
{
|
||||
Object *camera= RE_GetCamera(re);
|
||||
/* also check for camera here */
|
||||
if(re->scene->camera==NULL) {
|
||||
if(camera == NULL) {
|
||||
printf("ERROR: Cannot render, no camera\n");
|
||||
G.afbreek= 1;
|
||||
return;
|
||||
@ -2109,7 +2111,7 @@ static void do_render_fields_blur_3d(Render *re)
|
||||
load_backbuffer(re);
|
||||
|
||||
/* now use renderdata and camera to set viewplane */
|
||||
RE_SetCamera(re, re->scene->camera);
|
||||
RE_SetCamera(re, camera);
|
||||
|
||||
if(re->r.mode & R_FIELDS)
|
||||
do_render_fields_3d(re);
|
||||
@ -2648,11 +2650,11 @@ static void do_render_all_options(Render *re)
|
||||
}
|
||||
}
|
||||
|
||||
static int check_valid_camera(Scene *scene)
|
||||
static int check_valid_camera(Scene *scene, Object *camera_override)
|
||||
{
|
||||
int check_comp= 1;
|
||||
|
||||
if (scene->camera == NULL)
|
||||
if (camera_override == NULL && scene->camera == NULL)
|
||||
scene->camera= scene_find_camera(scene);
|
||||
|
||||
if(scene->r.scemode&R_DOSEQ) {
|
||||
@ -2697,13 +2699,15 @@ static int check_valid_camera(Scene *scene)
|
||||
|
||||
node= node->next;
|
||||
}
|
||||
} else return scene->camera != NULL;
|
||||
} else {
|
||||
return (camera_override != NULL || scene->camera != NULL);
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int RE_is_rendering_allowed(Scene *scene, void *erh, void (*error)(void *handle, const char *str))
|
||||
int RE_is_rendering_allowed(Scene *scene, Object *camera_override, void *erh, void (*error)(void *handle, const char *str))
|
||||
{
|
||||
SceneRenderLayer *srl;
|
||||
|
||||
@ -2764,13 +2768,13 @@ int RE_is_rendering_allowed(Scene *scene, void *erh, void (*error)(void *handle,
|
||||
}
|
||||
|
||||
/* check valid camera, without camera render is OK (compo, seq) */
|
||||
if(!check_valid_camera(scene)) {
|
||||
if(!check_valid_camera(scene, camera_override)) {
|
||||
error(erh, "No camera");
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* get panorama & ortho, only after camera is set */
|
||||
object_camera_mode(&scene->r, scene->camera);
|
||||
object_camera_mode(&scene->r, camera_override ? camera_override : scene->camera);
|
||||
|
||||
/* forbidden combinations */
|
||||
if(scene->r.mode & R_PANORAMA) {
|
||||
@ -2831,7 +2835,7 @@ static void update_physics_cache(Render *re, Scene *scene, int UNUSED(anim_init)
|
||||
BKE_ptcache_bake(&baker);
|
||||
}
|
||||
/* evaluating scene options for general Blender render */
|
||||
static int render_initialize_from_main(Render *re, Main *bmain, Scene *scene, SceneRenderLayer *srl, unsigned int lay, int anim, int anim_init)
|
||||
static int render_initialize_from_main(Render *re, Main *bmain, Scene *scene, SceneRenderLayer *srl, Object *camera_override, unsigned int lay, int anim, int anim_init)
|
||||
{
|
||||
int winx, winy;
|
||||
rcti disprect;
|
||||
@ -2859,6 +2863,7 @@ static int render_initialize_from_main(Render *re, Main *bmain, Scene *scene, Sc
|
||||
|
||||
re->main= bmain;
|
||||
re->scene= scene;
|
||||
re->camera_override= camera_override;
|
||||
re->lay= lay;
|
||||
|
||||
/* not too nice, but it survives anim-border render */
|
||||
@ -2899,14 +2904,14 @@ static int render_initialize_from_main(Render *re, Main *bmain, Scene *scene, Sc
|
||||
}
|
||||
|
||||
/* general Blender frame render call */
|
||||
void RE_BlenderFrame(Render *re, Main *bmain, Scene *scene, SceneRenderLayer *srl, unsigned int lay, int frame, const short write_still)
|
||||
void RE_BlenderFrame(Render *re, Main *bmain, Scene *scene, SceneRenderLayer *srl, Object *camera_override, unsigned int lay, int frame, const short write_still)
|
||||
{
|
||||
/* ugly global still... is to prevent preview events and signal subsurfs etc to make full resol */
|
||||
G.rendering= 1;
|
||||
|
||||
scene->r.cfra= frame;
|
||||
|
||||
if(render_initialize_from_main(re, bmain, scene, srl, lay, 0, 0)) {
|
||||
if(render_initialize_from_main(re, bmain, scene, srl, camera_override, lay, 0, 0)) {
|
||||
MEM_reset_peak_memory();
|
||||
do_render_all_options(re);
|
||||
|
||||
@ -3019,14 +3024,14 @@ static int do_write_image_or_movie(Render *re, Scene *scene, bMovieHandle *mh, R
|
||||
}
|
||||
|
||||
/* saves images to disk */
|
||||
void RE_BlenderAnim(Render *re, Main *bmain, Scene *scene, unsigned int lay, int sfra, int efra, int tfra, ReportList *reports)
|
||||
void RE_BlenderAnim(Render *re, Main *bmain, Scene *scene, Object *camera_override, unsigned int lay, int sfra, int efra, int tfra, ReportList *reports)
|
||||
{
|
||||
bMovieHandle *mh= BKE_get_movie_handle(scene->r.imtype);
|
||||
int cfrao= scene->r.cfra;
|
||||
int nfra;
|
||||
|
||||
/* do not fully call for each frame, it initializes & pops output window */
|
||||
if(!render_initialize_from_main(re, bmain, scene, NULL, lay, 0, 1))
|
||||
if(!render_initialize_from_main(re, bmain, scene, NULL, camera_override, lay, 0, 1))
|
||||
return;
|
||||
|
||||
/* ugly global still... is to prevent renderwin events and signal subsurfs etc to make full resol */
|
||||
@ -3059,7 +3064,7 @@ void RE_BlenderAnim(Render *re, Main *bmain, Scene *scene, unsigned int lay, int
|
||||
char name[FILE_MAX];
|
||||
|
||||
/* only border now, todo: camera lens. (ton) */
|
||||
render_initialize_from_main(re, bmain, scene, NULL, lay, 1, 0);
|
||||
render_initialize_from_main(re, bmain, scene, NULL, camera_override, lay, 1, 0);
|
||||
|
||||
if(nfra!=scene->r.cfra) {
|
||||
/*
|
||||
@ -3132,6 +3137,7 @@ void RE_BlenderAnim(Render *re, Main *bmain, Scene *scene, unsigned int lay, int
|
||||
|
||||
void RE_PreviewRender(Render *re, Main *bmain, Scene *sce)
|
||||
{
|
||||
Object *camera= RE_GetCamera(re);
|
||||
int winx, winy;
|
||||
|
||||
winx= (sce->r.size*sce->r.xsch)/100;
|
||||
@ -3143,7 +3149,7 @@ void RE_PreviewRender(Render *re, Main *bmain, Scene *sce)
|
||||
re->scene = sce;
|
||||
re->lay = sce->lay;
|
||||
|
||||
RE_SetCamera(re, sce->camera);
|
||||
RE_SetCamera(re, camera);
|
||||
|
||||
do_render_3d(re);
|
||||
}
|
||||
|
@ -781,7 +781,7 @@ static int render_frame(int argc, const char **argv, void *data)
|
||||
|
||||
frame = MIN2(MAXFRAME, MAX2(MINAFRAME, frame));
|
||||
|
||||
RE_BlenderAnim(re, bmain, scene, scene->lay, frame, frame, scene->r.frame_step, &reports);
|
||||
RE_BlenderAnim(re, bmain, scene, NULL, scene->lay, frame, frame, scene->r.frame_step, &reports);
|
||||
return 1;
|
||||
} else {
|
||||
printf("\nError: frame number must follow '-f / --render-frame'.\n");
|
||||
@ -802,7 +802,7 @@ static int render_animation(int UNUSED(argc), const char **UNUSED(argv), void *d
|
||||
Render *re= RE_NewRender(scene->id.name);
|
||||
ReportList reports;
|
||||
BKE_reports_init(&reports, RPT_PRINT);
|
||||
RE_BlenderAnim(re, bmain, scene, scene->lay, scene->r.sfra, scene->r.efra, scene->r.frame_step, &reports);
|
||||
RE_BlenderAnim(re, bmain, scene, NULL, scene->lay, scene->r.sfra, scene->r.efra, scene->r.frame_step, &reports);
|
||||
} else {
|
||||
printf("\nError: no blend loaded. cannot use '-a'.\n");
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user