[Bf-blender-cvs] [fbc65c6b28f] blender2.8: Fix T55165: Driving camera lens with property behaves unexpectedly

Dalai Felinto noreply at git.blender.org
Fri May 25 12:49:51 CEST 2018


Commit: fbc65c6b28fb4cec4ad67ba0345cd045914af20e
Author: Dalai Felinto
Date:   Fri May 25 11:05:51 2018 +0200
Branches: blender2.8
https://developer.blender.org/rBfbc65c6b28fb4cec4ad67ba0345cd045914af20e

Fix T55165: Driving camera lens with property behaves unexpectedly

Differential Revision: https://developer.blender.org/D3438

===================================================================

M	source/blender/blenkernel/BKE_camera.h
M	source/blender/blenkernel/BKE_constraint.h
M	source/blender/blenkernel/intern/armature.c
M	source/blender/blenkernel/intern/camera.c
M	source/blender/blenkernel/intern/constraint.c
M	source/blender/blenkernel/intern/object.c
M	source/blender/blenkernel/intern/object_update.c
M	source/blender/editors/include/ED_view3d.h
M	source/blender/editors/sculpt_paint/paint_image_proj.c
M	source/blender/editors/space_view3d/view3d_draw.c
M	source/blender/editors/space_view3d/view3d_edit.c
M	source/blender/editors/space_view3d/view3d_utils.c
M	source/blender/editors/space_view3d/view3d_view.c
M	source/blender/makesrna/intern/rna_object_api.c
M	source/blender/modifiers/intern/MOD_uvproject.c

===================================================================

diff --git a/source/blender/blenkernel/BKE_camera.h b/source/blender/blenkernel/BKE_camera.h
index c647dd3cc0f..eb05e66cf06 100644
--- a/source/blender/blenkernel/BKE_camera.h
+++ b/source/blender/blenkernel/BKE_camera.h
@@ -129,9 +129,9 @@ bool BKE_camera_view_frame_fit_to_scene(
         struct Scene *scene, struct ViewLayer *view_layer, struct Object *camera_ob,
         float r_co[3], float *r_scale);
 bool BKE_camera_view_frame_fit_to_coords(
-        const struct Scene *scene,
+        const struct Depsgraph *depsgraph,
         const float (*cos)[3], int num_cos,
-        const struct Object *camera_ob,
+        struct Object *camera_ob,
         float r_co[3], float *r_scale);
 
 void BKE_camera_to_gpu_dof(struct Object *camera, struct GPUFXSettings *r_fx_settings);
@@ -139,11 +139,11 @@ void BKE_camera_to_gpu_dof(struct Object *camera, struct GPUFXSettings *r_fx_set
 /* Camera multi-view API */
 
 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);
-bool           BKE_camera_multiview_spherical_stereo(struct RenderData *rd, struct Object *camera);
+void           BKE_camera_multiview_view_matrix(struct RenderData *rd, const struct Object *camera, const bool is_left, float r_viewmat[4][4]);
+void           BKE_camera_multiview_model_matrix(struct RenderData *rd, const struct Object *camera, const char *viewname, float r_modelmat[4][4]);
+float          BKE_camera_multiview_shift_x(struct RenderData *rd, const struct Object *camera, const char *viewname);
+void           BKE_camera_multiview_params(struct RenderData *rd, struct CameraParams *params, const struct Object *camera, const char *viewname);
+bool           BKE_camera_multiview_spherical_stereo(struct RenderData *rd, const struct Object *camera);
 
 /* Camera background image API */
 struct CameraBGImage *BKE_camera_background_image_new(struct Camera *cam);
diff --git a/source/blender/blenkernel/BKE_constraint.h b/source/blender/blenkernel/BKE_constraint.h
index 18f6301953c..98ba0f6f2a4 100644
--- a/source/blender/blenkernel/BKE_constraint.h
+++ b/source/blender/blenkernel/BKE_constraint.h
@@ -49,6 +49,7 @@ extern "C" {
 
 /* special struct for use in constraint evaluation */
 typedef struct bConstraintOb {
+	struct Depsgraph *depsgraph;/* to get evaluated armature. */
 	struct Scene *scene;        /* for system time, part of deglobalization, code nicer later with local time (ton) */
 	struct Object *ob;          /* if pchan, then armature that it comes from, otherwise constraint owner */
 	struct bPoseChannel *pchan; /* pose channel that owns the constraints being evaluated */
@@ -144,7 +145,7 @@ void BKE_constraints_proxylocal_extract(struct ListBase *dst, struct ListBase *s
 bool BKE_constraints_proxylocked_owner(struct Object *ob, struct bPoseChannel *pchan);
 
 /* Constraint Evaluation function prototypes */
-struct bConstraintOb *BKE_constraints_make_evalob(struct Scene *scene, struct Object *ob, void *subdata, short datatype);
+struct bConstraintOb *BKE_constraints_make_evalob(struct Depsgraph *depsgraph, struct Scene *scene, struct Object *ob, void *subdata, short datatype);
 void                  BKE_constraints_clear_evalob(struct bConstraintOb *cob);
 
 void BKE_constraint_mat_convertspace(
diff --git a/source/blender/blenkernel/intern/armature.c b/source/blender/blenkernel/intern/armature.c
index f80096b39eb..8dbfc35c774 100644
--- a/source/blender/blenkernel/intern/armature.c
+++ b/source/blender/blenkernel/intern/armature.c
@@ -2239,7 +2239,7 @@ void BKE_pose_where_is_bone(
 			/* prepare PoseChannel for Constraint solving
 			 * - makes a copy of matrix, and creates temporary struct to use
 			 */
-			cob = BKE_constraints_make_evalob(scene, ob, pchan, CONSTRAINT_OBTYPE_BONE);
+			cob = BKE_constraints_make_evalob(depsgraph, scene, ob, pchan, CONSTRAINT_OBTYPE_BONE);
 
 			/* Solve PoseChannel's Constraints */
 			BKE_constraints_solve(depsgraph, &pchan->constraints, cob, ctime); /* ctime doesnt alter objects */
diff --git a/source/blender/blenkernel/intern/camera.c b/source/blender/blenkernel/intern/camera.c
index f365ff04361..b1b4f18a6d5 100644
--- a/source/blender/blenkernel/intern/camera.c
+++ b/source/blender/blenkernel/intern/camera.c
@@ -268,7 +268,7 @@ void BKE_camera_params_from_view3d(CameraParams *params, Depsgraph *depsgraph, c
 
 	if (rv3d->persp == RV3D_CAMOB) {
 		/* camera view */
-		Object *ob_camera_eval = DEG_get_evaluated_object(depsgraph, v3d->camera);
+		const Object *ob_camera_eval = DEG_get_evaluated_object(depsgraph, v3d->camera);
 		BKE_camera_params_from_object(params, ob_camera_eval);
 
 		params->zoom = BKE_screen_view3d_zoom_to_fac(rv3d->camzoom);
@@ -666,16 +666,18 @@ bool BKE_camera_view_frame_fit_to_scene(
 }
 
 bool BKE_camera_view_frame_fit_to_coords(
-        const Scene *scene, const float (*cos)[3], int num_cos, const Object *camera_ob,
+        const Depsgraph *depsgraph, const float (*cos)[3], int num_cos, Object *camera_ob,
         float r_co[3], float *r_scale)
 {
+	Scene *scene_eval = DEG_get_evaluated_scene(depsgraph);
+	Object *camera_ob_eval = DEG_get_evaluated_object(depsgraph, camera_ob);
 	CameraParams params;
 	CameraViewFrameData data_cb;
 
 	/* just in case */
 	*r_scale = 1.0f;
 
-	camera_frame_fit_data_init(scene, camera_ob, &params, &data_cb);
+	camera_frame_fit_data_init(scene_eval, camera_ob_eval, &params, &data_cb);
 
 	/* run callback on all given coordinates */
 	while (num_cos--) {
@@ -687,12 +689,12 @@ bool BKE_camera_view_frame_fit_to_coords(
 
 /******************* multiview matrix functions ***********************/
 
-static void camera_model_matrix(Object *camera, float r_modelmat[4][4])
+static void camera_model_matrix(const Object *camera, float r_modelmat[4][4])
 {
 	copy_m4_m4(r_modelmat, camera->obmat);
 }
 
-static void camera_stereo3d_model_matrix(Object *camera, const bool is_left, float r_modelmat[4][4])
+static void camera_stereo3d_model_matrix(const Object *camera, const bool is_left, float r_modelmat[4][4])
 {
 	Camera *data = (Camera *)camera->data;
 	float interocular_distance, convergence_distance;
@@ -790,7 +792,7 @@ static void camera_stereo3d_model_matrix(Object *camera, const bool is_left, flo
 }
 
 /* the view matrix is used by the viewport drawing, it is basically the inverted model matrix */
-void BKE_camera_multiview_view_matrix(RenderData *rd, Object *camera, const bool is_left, float r_viewmat[4][4])
+void BKE_camera_multiview_view_matrix(RenderData *rd, const Object *camera, const bool is_left, float r_viewmat[4][4])
 {
 	BKE_camera_multiview_model_matrix(rd, camera, is_left ? STEREO_LEFT_NAME : STEREO_RIGHT_NAME, r_viewmat);
 	invert_m4(r_viewmat);
@@ -805,7 +807,7 @@ static bool camera_is_left(const char *viewname)
 	return true;
 }
 
-void BKE_camera_multiview_model_matrix(RenderData *rd, Object *camera, const char *viewname, float r_modelmat[4][4])
+void BKE_camera_multiview_model_matrix(RenderData *rd, const Object *camera, const char *viewname, float r_modelmat[4][4])
 {
 	const bool is_multiview = (rd && rd->scemode & R_MULTIVIEW) != 0;
 
@@ -822,7 +824,7 @@ void BKE_camera_multiview_model_matrix(RenderData *rd, Object *camera, const cha
 	normalize_m4(r_modelmat);
 }
 
-bool BKE_camera_multiview_spherical_stereo(RenderData *rd, Object *camera)
+bool BKE_camera_multiview_spherical_stereo(RenderData *rd, const Object *camera)
 {
 	Camera *cam;
 	const bool is_multiview = (rd && rd->scemode & R_MULTIVIEW) != 0;
@@ -895,7 +897,7 @@ Object *BKE_camera_multiview_render(Scene *scene, Object *camera, const char *vi
 	}
 }
 
-static float camera_stereo3d_shift_x(Object *camera, const char *viewname)
+static float camera_stereo3d_shift_x(const Object *camera, const char *viewname)
 {
 	Camera *data = camera->data;
 	float shift = data->shiftx;
@@ -933,7 +935,7 @@ static float camera_stereo3d_shift_x(Object *camera, const char *viewname)
 	return shift;
 }
 
-float BKE_camera_multiview_shift_x(RenderData *rd, Object *camera, const char *viewname)
+float BKE_camera_multiview_shift_x(RenderData *rd, const Object *camera, const char *viewname)
 {
 	const bool is_multiview = (rd && rd->scemode & R_MULTIVIEW) != 0;
 	Camera *data = camera->data;
@@ -951,7 +953,7 @@ float BKE_camera_multiview_shift_x(RenderData *rd, Object *camera, const char *v
 	}
 }
 
-void BKE_camera_multiview_params(RenderData *rd, CameraParams *params, Object *camera, const char *viewname)
+void BKE_camera_multiview_params(RenderData *rd, CameraParams *params, const Object *camera, const char *viewname)
 {
 	if (camera->type == OB_CAMERA) {
 		params->shiftx = BKE_camera_multiview_shift_x(rd, camera, viewname);
diff --git a/source/blender/blenkernel/intern/constraint.c b/source/blender/blenkernel/intern/constraint.c
index 6a477c9c06e..5cdf011eae6 100644
--- a/source/blender/blenkernel/intern/constraint.c
+++ b/source/blender/blenkernel/intern/constraint.c
@@ -84,6 +84,9 @@
 
 #include "BIK_api.h"
 
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_query.h"
+
 #ifdef WITH_PYTHON
 #  include "BPY_extern.h"
 #endif
@@ -116,7 +119,7 @@ void BKE_constraint_unique_name(bConstraint *con, ListBase *list)
 
 /* package an object/bone for use in constraint evaluation */
 /* This function MEM_calloc's a bConstraintOb struct, that will need to be freed after evaluation */
-bConstraintOb *BKE_constraints_make_evalob(Scene *scene, Object *ob, void *subdata, short datatype)
+bConstraintOb *BKE_constraints_make_evalob(Depsgraph *depsgraph, Scene *scene, Object *ob, void *subdata, short datatype)
 {
 	bConstraintOb *cob;
 	
@@ -125,6 +128,7 @@ bConstraintOb *BKE_constraints_make_evalob(Scene *scene, Object *ob, void *subda
 	
 	/* for sys

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list