[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [36384] trunk/blender/source: add back support for rendering local view camera.
Campbell Barton
ideasman42 at gmail.com
Sat Apr 30 06:29:42 CEST 2011
Revision: 36384
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=36384
Author: campbellbarton
Date: 2011-04-30 04:29:36 +0000 (Sat, 30 Apr 2011)
Log Message:
-----------
add back support for rendering local view camera.
Modified Paths:
--------------
trunk/blender/source/blender/blenkernel/intern/sequencer.c
trunk/blender/source/blender/editors/render/render_internal.c
trunk/blender/source/blender/render/extern/include/RE_pipeline.h
trunk/blender/source/blender/render/intern/include/render_types.h
trunk/blender/source/blender/render/intern/source/convertblender.c
trunk/blender/source/blender/render/intern/source/initrender.c
trunk/blender/source/blender/render/intern/source/pipeline.c
trunk/blender/source/creator/creator.c
Modified: trunk/blender/source/blender/blenkernel/intern/sequencer.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/sequencer.c 2011-04-30 04:14:19 UTC (rev 36383)
+++ trunk/blender/source/blender/blenkernel/intern/sequencer.c 2011-04-30 04:29:36 UTC (rev 36384)
@@ -1948,7 +1948,7 @@
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;
Modified: trunk/blender/source/blender/editors/render/render_internal.c
===================================================================
--- trunk/blender/source/blender/editors/render/render_internal.c 2011-04-30 04:14:19 UTC (rev 36383)
+++ trunk/blender/source/blender/editors/render/render_internal.c 2011-04-30 04:29:36 UTC (rev 36384)
@@ -421,6 +421,7 @@
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 @@
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 @@
Render *re;
wmWindow *win;
SceneRenderLayer *srl;
+ struct Object *camera_override;
int lay;
short anim, write_still;
Image *image;
@@ -590,9 +592,9 @@
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 @@
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 @@
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;
Modified: trunk/blender/source/blender/render/extern/include/RE_pipeline.h
===================================================================
--- trunk/blender/source/blender/render/extern/include/RE_pipeline.h 2011-04-30 04:14:19 UTC (rev 36383)
+++ trunk/blender/source/blender/render/extern/include/RE_pipeline.h 2011-04-30 04:29:36 UTC (rev 36384)
@@ -191,6 +191,7 @@
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_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_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 */
Modified: trunk/blender/source/blender/render/intern/include/render_types.h
===================================================================
--- trunk/blender/source/blender/render/intern/include/render_types.h 2011-04-30 04:14:19 UTC (rev 36383)
+++ trunk/blender/source/blender/render/intern/include/render_types.h 2011-04-30 04:29:36 UTC (rev 36384)
@@ -182,6 +182,7 @@
Scene *scene;
RenderData r;
World wrld;
+ struct Object *camera_override;
unsigned int lay;
ListBase parts;
Modified: trunk/blender/source/blender/render/intern/source/convertblender.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/convertblender.c 2011-04-30 04:14:19 UTC (rev 36383)
+++ trunk/blender/source/blender/render/intern/source/convertblender.c 2011-04-30 04:29:36 UTC (rev 36384)
@@ -164,7 +164,8 @@
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 @@
* 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 @@
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 @@
Scene *sce;
float mat[4][4];
float amb[3];
+ Object *camera= RE_GetCamera(re);
re->main= bmain;
re->scene= scene;
@@ -5008,16 +5010,16 @@
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 @@
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 @@
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_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 @@
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 @@
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 @@
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);
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list