Revert to master - those changes are globally valid, but remain incomplete,
[blender.git] / source / blender / blenkernel / BKE_camera.h
index d21c1092922f42498e687814c7e2e003c60c4ca5..aacb7a4066bb742037eeae33eaf6496434665e3e 100644 (file)
@@ -25,8 +25,8 @@
  * ***** END GPL LICENSE BLOCK *****
  */
 
-#ifndef BKE_CAMERA_H
-#define BKE_CAMERA_H
+#ifndef __BKE_CAMERA_H__
+#define __BKE_CAMERA_H__
 
 /** \file BKE_camera.h
  *  \ingroup bke
 extern "C" {
 #endif
 
+#include "DNA_vec_types.h"
+
 struct Camera;
+struct Main;
 struct Object;
+struct RegionView3D;
 struct RenderData;
 struct Scene;
 struct rctf;
+struct View3D;
+struct GPUFXSettings;
+
+/* Camera Datablock */
+
+void *BKE_camera_add(struct Main *bmain, const char *name);
+struct Camera *BKE_camera_copy(struct Camera *cam);
+void BKE_camera_make_local(struct Camera *cam);
+void BKE_camera_free(struct Camera *ca);
+
+/* Camera Usage */
+
+float BKE_camera_object_dof_distance(struct Object *ob);
+void BKE_camera_object_mode(struct RenderData *rd, struct Object *ob);
+
+int BKE_camera_sensor_fit(int sensor_fit, float sizex, float sizey);
+float BKE_camera_sensor_size(int sensor_fit, float sensor_x, float sensor_y);
+
+/* Camera Parameters:
+ *
+ * Intermediate struct for storing camera parameters from various sources,
+ * to unify computation of viewplane, window matrix, ... */
+
+typedef struct CameraParams {
+       /* lens */
+       bool is_ortho;
+       float lens;
+       float ortho_scale;
+       float zoom;
+
+       float shiftx;
+       float shifty;
+       float offsetx;
+       float offsety;
+
+       /* sensor */
+       float sensor_x;
+       float sensor_y;
+       int sensor_fit;
+
+       /* clipping */
+       float clipsta;
+       float clipend;
+
+       /* fields */
+       int use_fields;
+       int field_second;
+       int field_odd;
+
+       /* computed viewplane */
+       float ycor;
+       float viewdx;
+       float viewdy;
+       rctf viewplane;
+
+       /* computed matrix */
+       float winmat[4][4];
+} CameraParams;
+
+/* values for CameraParams.zoom, need to be taken into account for some operations */
+#define CAMERA_PARAM_ZOOM_INIT_CAMOB 1.0f
+#define CAMERA_PARAM_ZOOM_INIT_PERSP 2.0f
+
+void BKE_camera_params_init(CameraParams *params);
+void BKE_camera_params_from_object(CameraParams *params, const struct Object *camera);
+void BKE_camera_params_from_view3d(CameraParams *params, const struct View3D *v3d, const struct RegionView3D *rv3d);
+
+void BKE_camera_params_compute_viewplane(CameraParams *params, int winx, int winy, float aspx, float aspy);
+void BKE_camera_params_compute_matrix(CameraParams *params);
+
+/* Camera View Frame */
 
-void *add_camera(const char *name);
-struct Camera *copy_camera(struct Camera *cam);
-void make_local_camera(struct Camera *cam);
-void free_camera(struct Camera *ca);
+void BKE_camera_view_frame_ex(
+        const struct Scene *scene, const struct Camera *camera,
+        const float drawsize, const bool do_clip, const float scale[3],
+        float r_asp[2], float r_shift[2], float *r_drawsize, float r_vec[4][3]);
+void BKE_camera_view_frame(
+        const struct Scene *scene, const struct Camera *camera,
+        float r_vec[4][3]);
 
-float dof_camera(struct Object *ob);
+bool BKE_camera_view_frame_fit_to_scene(
+        struct Scene *scene, struct View3D *v3d, struct Object *camera_ob,
+        float r_co[3], float *r_scale);
+bool BKE_camera_view_frame_fit_to_coords(
+        const struct Scene *scene,
+        const float (*cos)[3], int num_cos,
+        const struct Object *camera_ob,
+        float r_co[3], float *r_scale);
 
-void object_camera_mode(struct RenderData *rd, struct Object *camera);
-void object_camera_intrinsics(struct Object *camera, struct Camera **cam_r, short *is_ortho, float *shiftx, float *shifty,
-                       float *clipsta, float *clipend, float *lens, float *sensor_x, float *sensor_y, short *sensor_fit);
-void object_camera_matrix(
-               struct RenderData *rd, struct Object *camera, int winx, int winy, short field_second,
-               float winmat[][4], struct rctf *viewplane, float *clipsta, float *clipend, float *lens,
-               float *sensor_x, float *sensor_y, short *sensor_fit, float *ycor,
-               float *viewdx, float *viewdy);
+void BKE_camera_to_gpu_dof(struct Object *camera, struct GPUFXSettings *r_fx_settings);
 
-void camera_view_frame_ex(struct Scene *scene, struct Camera *camera, float drawsize, const short do_clip, const float scale[3],
-                          float r_asp[2], float r_shift[2], float *r_drawsize, float r_vec[4][3]);
+/* Camera multi-view API */
 
-void camera_view_frame(struct Scene *scene, struct Camera *camera, float r_vec[4][3]);
+struct Object *BKE_camera_multiview_render(struct Scene *scene, struct Object *camera, const char *viewname);
+void           BKE_camera_multiview_view_matrix(struct RenderData *rd, struct Object *camera, const bool is_left, float r_viewmat[4][4]);
+void           BKE_camera_multiview_model_matrix(struct RenderData *rd, struct Object *camera, const char *viewname, float r_modelmat[4][4]);
+float          BKE_camera_multiview_shift_x(struct RenderData *rd, struct Object *camera, const char *viewname);
+void           BKE_camera_multiview_params(struct RenderData *rd, struct CameraParams *params, struct Object *camera, const char *viewname);
 
 #ifdef __cplusplus
 }