diff options
Diffstat (limited to 'source/blender/render')
-rw-r--r-- | source/blender/render/extern/include/RE_pipeline.h | 1 | ||||
-rw-r--r-- | source/blender/render/intern/source/initrender.c | 19 |
2 files changed, 20 insertions, 0 deletions
diff --git a/source/blender/render/extern/include/RE_pipeline.h b/source/blender/render/extern/include/RE_pipeline.h index cc2bd01718a..614a1735f44 100644 --- a/source/blender/render/extern/include/RE_pipeline.h +++ b/source/blender/render/extern/include/RE_pipeline.h @@ -335,6 +335,7 @@ struct RenderPass *RE_pass_find_by_type(volatile struct RenderLayer *rl, int pas #define RE_BAKE_AO 2 void RE_GetCameraWindow(struct Render *re, struct Object *camera, int frame, float mat[4][4]); +void RE_GetCameraWindowWithOverscan(struct Render *re, float mat[4][4], float overscan); void RE_GetCameraModelMatrix(struct Render *re, struct Object *camera, float r_mat[4][4]); struct Scene *RE_GetScene(struct Render *re); void RE_SetScene(struct Render *re, struct Scene *sce); diff --git a/source/blender/render/intern/source/initrender.c b/source/blender/render/intern/source/initrender.c index 828d626f9a7..1420b8feef7 100644 --- a/source/blender/render/intern/source/initrender.c +++ b/source/blender/render/intern/source/initrender.c @@ -195,6 +195,25 @@ void RE_GetCameraWindow(struct Render *re, struct Object *camera, int frame, flo copy_m4_m4(mat, re->winmat); } +/* Must be called after RE_GetCameraWindow(), does not change re->winmat. */ +void RE_GetCameraWindowWithOverscan(struct Render *re, float mat[4][4], float overscan) +{ + CameraParams params; + params.is_ortho = re->winmat[3][3] != 0.0f; + params.clipsta = re->clipsta; + params.clipend = re->clipend; + params.viewplane = re->viewplane; + + overscan *= max_ff(BLI_rctf_size_x(¶ms.viewplane), BLI_rctf_size_y(¶ms.viewplane)); + + params.viewplane.xmin -= overscan; + params.viewplane.xmax += overscan; + params.viewplane.ymin -= overscan; + params.viewplane.ymax += overscan; + BKE_camera_params_compute_matrix(¶ms); + copy_m4_m4(mat, params.winmat); +} + void RE_GetCameraModelMatrix(Render *re, struct Object *camera, float r_mat[4][4]) { BKE_camera_multiview_model_matrix(&re->r, camera, re->viewname, r_mat); |