[Bf-blender-cvs] [2ae2e54] multiview: Merge remote-tracking branch 'origin/master' into multiview

Dalai Felinto noreply at git.blender.org
Tue Jan 6 14:12:11 CET 2015


Commit: 2ae2e54a9294da8b898189af24dccb6f38c668c8
Author: Dalai Felinto
Date:   Tue Jan 6 11:06:05 2015 -0200
Branches: multiview
https://developer.blender.org/rB2ae2e54a9294da8b898189af24dccb6f38c668c8

Merge remote-tracking branch 'origin/master' into multiview

Conflicts:
	release/scripts/startup/bl_ui/space_sequencer.py
	source/blender/blenkernel/BKE_sequencer.h
	source/blender/blenkernel/intern/camera.c
	source/blender/blenkernel/intern/sequencer.c
	source/blender/blenloader/intern/versioning_270.c
	source/blender/editors/include/ED_view3d.h
	source/blender/editors/render/render_opengl.c
	source/blender/editors/render/render_preview.c
	source/blender/editors/space_sequencer/sequencer_add.c
	source/blender/editors/space_sequencer/sequencer_draw.c
	source/blender/editors/space_view3d/view3d_draw.c
	source/blender/makesrna/intern/rna_color.c
	source/blender/makesrna/intern/rna_image.c
	source/blender/render/extern/include/RE_pipeline.h
	source/blender/render/intern/source/external_engine.c
	source/blender/render/intern/source/pipeline.c
	source/blender/windowmanager/intern/wm_files.c

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



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

diff --cc intern/cycles/blender/blender_session.h
index 619aa6b,63cb15d..16e2bbb
--- a/intern/cycles/blender/blender_session.h
+++ b/intern/cycles/blender/blender_session.h
@@@ -89,9 -89,9 +89,10 @@@ public
  	BL::SpaceView3D b_v3d;
  	BL::RegionView3D b_rv3d;
  	string b_rlay_name;
 +	string b_rview_name;
  
  	string last_status;
+ 	string last_error;
  	float last_progress;
  
  	int width, height;
diff --cc source/blender/blenkernel/BKE_camera.h
index d2f79de,26d4986..d00c4c6
--- a/source/blender/blenkernel/BKE_camera.h
+++ b/source/blender/blenkernel/BKE_camera.h
@@@ -118,13 -118,10 +118,15 @@@ void BKE_camera_view_frame_ex(struct Sc
  void BKE_camera_view_frame(struct Scene *scene, struct Camera *camera, float r_vec[4][3]);
  
  bool BKE_camera_view_frame_fit_to_scene(struct Scene *scene, struct View3D *v3d, struct Object *camera_ob,
-                                         float r_co[3]);
+                                         float r_co[3], float *r_scale);
+ bool BKE_camera_view_frame_fit_to_coords(struct Scene *scene, float (*cos)[3], int num_cos,
+                                          struct Object *camera_ob, float r_co[3], float *r_scale);
  
 +void BKE_camera_view_matrix(struct RenderData *rd, struct Object *camera, const bool is_left, float r_viewmat[4][4]);
 +void BKE_camera_model_matrix(struct RenderData *rd, struct Object *camera, const char *viewname, float r_modelmat[4][4]);
 +struct Object *BKE_camera_render(struct Scene *scene, struct Object *camera, const char *viewname);
 +float BKE_camera_shift_x(struct RenderData *rd, struct Object *camera, const char *viewname);
 +void BKE_camera_params_stereo3d(struct RenderData *rd, struct CameraParams *params, struct Object *camera, const char *viewname);
  #ifdef __cplusplus
  }
  #endif
diff --cc source/blender/blenkernel/BKE_sequencer.h
index f258cf5,24e8d63..17a0b4c
--- a/source/blender/blenkernel/BKE_sequencer.h
+++ b/source/blender/blenkernel/BKE_sequencer.h
@@@ -101,11 -100,12 +101,13 @@@ typedef struct SeqRenderData 
  	float motion_blur_shutter;
  	bool skip_cache;
  	bool is_proxy_render;
 +	size_t view_id;
  } SeqRenderData;
  
- SeqRenderData BKE_sequencer_new_render_data(struct EvaluationContext *eval_ctx, struct Main *bmain,
-                                             struct Scene *scene, int rectx, int recty, int preview_render_size);
+ void BKE_sequencer_new_render_data(
+         struct EvaluationContext *eval_ctx, struct Main *bmain, struct Scene *scene,
+         int rectx, int recty, int preview_render_size,
+         SeqRenderData *r_context);
  
  /* Wipe effect */
  enum {
@@@ -400,7 -395,7 +402,7 @@@ struct Sequence *BKE_sequencer_add_soun
  struct Sequence *BKE_sequencer_add_movie_strip(struct bContext *C, ListBase *seqbasep, struct SeqLoadInfo *seq_load);
  
  /* view3d draw callback, run when not in background view */
- typedef struct ImBuf *(*SequencerDrawView)(struct Scene *, struct Object *, int, int, unsigned int, int, bool, bool, int, const char *, char[256]);
 -typedef struct ImBuf *(*SequencerDrawView)(struct Scene *, struct Object *, int, int, unsigned int, int, bool, bool, bool, int, char[256]);
++typedef struct ImBuf *(*SequencerDrawView)(struct Scene *, struct Object *, int, int, unsigned int, int, bool, bool, bool, int, const char *, char[256]);
  extern SequencerDrawView sequencer_view3d_cb;
  
  /* copy/paste */
diff --cc source/blender/blenkernel/intern/camera.c
index 9245a11,d0470ba..bccbf33
--- a/source/blender/blenkernel/intern/camera.c
+++ b/source/blender/blenkernel/intern/camera.c
@@@ -37,11 -36,10 +37,12 @@@
  #include "DNA_object_types.h"
  #include "DNA_scene_types.h"
  #include "DNA_view3d_types.h"
 +#include "DNA_ID.h"
  
  #include "BLI_math.h"
--#include "BLI_utildefines.h"
+ #include "BLI_rect.h"
 +#include "BLI_string.h"
++#include "BLI_utildefines.h"
  
  #include "BKE_animsys.h"
  #include "BKE_camera.h"
@@@ -599,249 -640,45 +648,288 @@@ static bool camera_frame_fit_calc_from_
  			return true;
  		}
  	}
+ 
+ 	return false;
+ }
+ 
+ /* don't move the camera, just yield the fit location */
+ /* r_scale only valid/useful for ortho cameras */
+ bool BKE_camera_view_frame_fit_to_scene(
+         Scene *scene, struct View3D *v3d, Object *camera_ob, float r_co[3], float *r_scale)
+ {
+ 	CameraParams params;
+ 	CameraViewFrameData data_cb;
+ 
+ 	/* just in case */
+ 	*r_scale = 1.0f;
+ 
+ 	camera_frame_fit_data_init(scene, camera_ob, &params, &data_cb);
+ 
+ 	/* run callback on all visible points */
+ 	BKE_scene_foreach_display_point(scene, v3d, BA_SELECT, camera_to_frame_view_cb, &data_cb);
+ 
+ 	return camera_frame_fit_calc_from_data(&params, &data_cb, r_co, r_scale);
+ }
+ 
+ bool BKE_camera_view_frame_fit_to_coords(
+         Scene *scene, float (*cos)[3], int num_cos, Object *camera_ob, float r_co[3], float *r_scale)
+ {
+ 	CameraParams params;
+ 	CameraViewFrameData data_cb;
+ 
+ 	/* just in case */
+ 	*r_scale = 1.0f;
+ 
+ 	camera_frame_fit_data_init(scene, camera_ob, &params, &data_cb);
+ 
+ 	/* run callback on all given coordinates */
+ 	while (num_cos--) {
+ 		camera_to_frame_view_cb(cos[num_cos], &data_cb);
+ 	}
+ 
+ 	return camera_frame_fit_calc_from_data(&params, &data_cb, r_co, r_scale);
  }
  
 +/******************* multiview matrix functions ***********************/
 +
 +static void camera_model_matrix(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])
 +{
 +	Camera *data = (Camera *)camera->data;
 +	float interocular_distance, convergence_distance;
 +	short convergence_mode, pivot;
 +	float sizemat[4][4];
 +
 +	float fac = 1.0f;
 +	float fac_signed;
 +
 +	interocular_distance = data->stereo.interocular_distance;
 +	convergence_distance = data->stereo.convergence_distance;
 +	convergence_mode = data->stereo.convergence_mode;
 +	pivot = data->stereo.pivot;
 +
 +	if (((pivot == CAM_S3D_PIVOT_LEFT) && is_left) ||
 +	    ((pivot == CAM_S3D_PIVOT_RIGHT) && !is_left))
 +	{
 +		return camera_model_matrix(camera, r_modelmat);
 +	}
 +	else {
 +		float size[3];
 +		mat4_to_size(size, camera->obmat);
 +		size_to_mat4(sizemat, size);
 +	}
 +
 +	if (pivot == CAM_S3D_PIVOT_CENTER)
 +		fac = 0.5f;
 +
 +	fac_signed = is_left ? fac : -fac;
 +
 +	/* rotation */
 +	if (convergence_mode == CAM_S3D_TOE) {
 +		float angle;
 +		float angle_sin, angle_cos;
 +		float toeinmat[4][4];
 +		float rotmat[4][4];
 +
 +		unit_m4(rotmat);
 +
 +		if (pivot == CAM_S3D_PIVOT_CENTER) {
 +			fac = -fac;
 +			fac_signed = -fac_signed;
 +		}
 +
 +		angle = atanf((interocular_distance * 0.5f) / convergence_distance) / fac;
 +
 +		angle_cos = cosf(angle * fac_signed);
 +		angle_sin = sinf(angle * fac_signed);
 +
 +		rotmat[0][0] =  angle_cos;
 +		rotmat[2][0] = -angle_sin;
 +		rotmat[0][2] =  angle_sin;
 +		rotmat[2][2] =  angle_cos;
 +
 +		if (pivot == CAM_S3D_PIVOT_CENTER) {
 +			/* set the rotation */
 +			copy_m4_m4(toeinmat, rotmat);
 +			/* set the translation */
 +			toeinmat[3][0] = interocular_distance * fac_signed;
 +
 +			/* transform */
 +			normalize_m4_m4(r_modelmat, camera->obmat);
 +			mul_m4_m4m4(r_modelmat, r_modelmat, toeinmat);
 +
 +			/* scale back to the original size */
 +			mul_m4_m4m4(r_modelmat, r_modelmat, sizemat);
 +		}
 +		else { /* CAM_S3D_PIVOT_LEFT, CAM_S3D_PIVOT_RIGHT */
 +			/* rotate perpendicular to the interocular line */
 +			normalize_m4_m4(r_modelmat, camera->obmat);
 +			mul_m4_m4m4(r_modelmat, r_modelmat, rotmat);
 +
 +			/* translate along the interocular line */
 +			unit_m4(toeinmat);
 +			toeinmat[3][0] = -interocular_distance * fac_signed;
 +			mul_m4_m4m4(r_modelmat, r_modelmat, toeinmat);
 +
 +			/* rotate to toe-in angle */
 +			mul_m4_m4m4(r_modelmat, r_modelmat, rotmat);
 +
 +			/* scale back to the original size */
 +			mul_m4_m4m4(r_modelmat, r_modelmat, sizemat);
 +		}
 +	}
 +	else {
 +		normalize_m4_m4(r_modelmat, camera->obmat);
 +
 +		/* translate - no rotation in CAM_S3D_OFFAXIS, CAM_S3D_PARALLEL */
 +		translate_m4(r_modelmat, -interocular_distance * fac_signed, 0.0f, 0.0f);
 +
 +		/* scale back to the original size */
 +		mul_m4_m4m4(r_modelmat, r_modelmat, sizemat);
 +	}
 +}
 +
 +/* the view matrix is used by the viewport drawing, it is basically the inverted model matrix */
 +void BKE_camera_view_matrix(RenderData *rd, Object *camera, const bool is_left, float r_viewmat[4][4])
 +{
 +	BKE_camera_model_matrix(rd, camera, is_left ? STEREO_LEFT_NAME : STEREO_RIGHT_NAME, r_viewmat);
 +	normalize_m4(r_viewmat);
 +	invert_m4(r_viewmat);
 +}
 +
 +/* left is the default */
 +static bool camera_is_left(const char *viewname)
 +{
 +	if (viewname && viewname[0] != '\0') {
 +		return !STREQ(viewname, STEREO_RIGHT_NAME);
 +	}
 +	return true;
 +}
 +
 +void BKE_camera_model_matrix(RenderData *rd, Object *camera, const char *viewname, float r_modelmat[4][4])
 +{
 +	const bool is_multiview = (rd && rd->scemode & R_MULTIVIEW) != 0;
 +
 +	if (!is_multiview) {
 +		return camera_model_matrix(camera, r_modelmat);
 +	}
 +	else if (rd->views_format == SCE_VIEWS_FORMAT_MULTIVIEW) {
 +		return camera_model_matrix(camera, r_modelmat);
 +	}
 +	else { /* SCE_VIEWS_SETUP_BASIC */
 +		const bool is_left = camera_is_left(viewname);
 +		return camera_stereo3d_model_matrix(camera, is_left, r_modelmat);
 +	}
 +}
 +
 +static Object *camera_multiview_advanced(Scene *scene, Object *camera, const char *suffix)
 +{
 +	SceneRenderView *srv;
 +	char name[MAX_NAME];
 +	const char *camera_name = camera->id.name + 2;
 +	const int len_name = strlen(camera_name);
 +
 +	name[0] = '\0';
 +
 +	for (srv = scene->r.views.first; srv; srv = srv->next) {
 +		const int len_suffix = strlen(srv->suffix);
 +
 +		if (len_name < len_suffix)
 +			continue;
 +
 +		if (STREQ(camera_name + (len_name - len_suffix), srv->suffix)) {
 +			BLI_snprintf(name, sizeof(name), "%.*s%s", (len_name - len_suffix), camera_name, suffix);
 +			break;
 +		}
 +	}
 +
 +	if (name[0] != '\0') {
 +		Base *base = BKE_scene_base_find_by_name(scene, name);
 +		if (base) {
 +			return base->object;
 +		}
 +	}
 +
 +	return camera;
 +}
 +
 +/* returns the camera to be used for render */
 +Object *BKE_camera_render(Scene *scene, Object

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list