Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2016-01-30 16:18:29 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2016-01-30 17:08:57 +0300
commit74c7707e8c763a60c2936e95c2f0ad13dfd33f43 (patch)
tree08dddce249a8821e54728355f32fea976d324ac1 /intern/cycles/blender/blender_camera.cpp
parent0e4e1993e619caad3dfbecc20ab9fb20cdf6cd06 (diff)
Cycles: Pass Blender's C++ RNA structures by reference
This way we avoid passing structures which could be up to few hundred bytes by value to the utility functions. Ideally we'll also have to add `const` qualifier in majority of the calls, but C++ RNA does not allow us to do that because it does not know if some function modifies contents or not.
Diffstat (limited to 'intern/cycles/blender/blender_camera.cpp')
-rw-r--r--intern/cycles/blender/blender_camera.cpp126
1 files changed, 92 insertions, 34 deletions
diff --git a/intern/cycles/blender/blender_camera.cpp b/intern/cycles/blender/blender_camera.cpp
index 5f2e0762964..18e3431812d 100644
--- a/intern/cycles/blender/blender_camera.cpp
+++ b/intern/cycles/blender/blender_camera.cpp
@@ -77,7 +77,8 @@ struct BlenderCamera {
Transform matrix;
};
-static void blender_camera_init(BlenderCamera *bcam, BL::RenderSettings b_render)
+static void blender_camera_init(BlenderCamera *bcam,
+ BL::RenderSettings& b_render)
{
memset(bcam, 0, sizeof(BlenderCamera));
@@ -107,7 +108,9 @@ static void blender_camera_init(BlenderCamera *bcam, BL::RenderSettings b_render
bcam->pixelaspect.y = b_render.pixel_aspect_y();
}
-static float blender_camera_focal_distance(BL::RenderEngine b_engine, BL::Object b_ob, BL::Camera b_camera)
+static float blender_camera_focal_distance(BL::RenderEngine& b_engine,
+ BL::Object& b_ob,
+ BL::Camera& b_camera)
{
BL::Object b_dof_object = b_camera.dof_object();
@@ -124,7 +127,10 @@ static float blender_camera_focal_distance(BL::RenderEngine b_engine, BL::Object
return fabsf(dot(view_dir, dof_dir));
}
-static void blender_camera_from_object(BlenderCamera *bcam, BL::RenderEngine b_engine, BL::Object b_ob, bool skip_panorama = false)
+static void blender_camera_from_object(BlenderCamera *bcam,
+ BL::RenderEngine& b_engine,
+ BL::Object& b_ob,
+ bool skip_panorama = false)
{
BL::ID b_ob_data = b_ob.data();
@@ -439,7 +445,9 @@ static void blender_camera_sync(Camera *cam, BlenderCamera *bcam, int width, int
/* Sync Render Camera */
-void BlenderSync::sync_camera(BL::RenderSettings b_render, BL::Object b_override, int width, int height)
+void BlenderSync::sync_camera(BL::RenderSettings& b_render,
+ BL::Object& b_override,
+ int width, int height)
{
BlenderCamera bcam;
blender_camera_init(&bcam, b_render);
@@ -448,9 +456,9 @@ void BlenderSync::sync_camera(BL::RenderSettings b_render, BL::Object b_override
bcam.pixelaspect.x = b_render.pixel_aspect_x();
bcam.pixelaspect.y = b_render.pixel_aspect_y();
bcam.shuttertime = b_render.motion_blur_shutter();
- curvemapping_to_array(b_render.motion_blur_shutter_curve(),
- bcam.shutter_curve,
- RAMP_TABLE_SIZE);
+
+ BL::CurveMapping b_shutter_curve(b_render.motion_blur_shutter_curve());
+ curvemapping_to_array(b_shutter_curve, bcam.shutter_curve, RAMP_TABLE_SIZE);
PointerRNA cscene = RNA_pointer_get(&b_scene.ptr, "cycles");
switch(RNA_enum_get(&cscene, "motion_blur_position")) {
@@ -507,8 +515,8 @@ void BlenderSync::sync_camera(BL::RenderSettings b_render, BL::Object b_override
blender_camera_sync(cam, &bcam, width, height);
}
-void BlenderSync::sync_camera_motion(BL::RenderSettings b_render,
- BL::Object b_ob,
+void BlenderSync::sync_camera_motion(BL::RenderSettings& b_render,
+ BL::Object& b_ob,
int width, int height,
float motion_time)
{
@@ -562,19 +570,32 @@ void BlenderSync::sync_camera_motion(BL::RenderSettings b_render,
/* Sync 3D View Camera */
-static void blender_camera_view_subset(BL::RenderEngine b_engine, BL::RenderSettings b_render, BL::Scene b_scene, BL::Object b_ob, BL::SpaceView3D b_v3d,
- BL::RegionView3D b_rv3d, int width, int height, BoundBox2D *view_box, BoundBox2D *cam_box);
-
-static void blender_camera_from_view(BlenderCamera *bcam, BL::RenderEngine b_engine, BL::Scene b_scene, BL::SpaceView3D b_v3d, BL::RegionView3D b_rv3d, int width, int height, bool skip_panorama = false)
+static void blender_camera_view_subset(BL::RenderEngine& b_engine,
+ BL::RenderSettings& b_render,
+ BL::Scene& b_scene,
+ BL::Object& b_ob,
+ BL::SpaceView3D& b_v3d,
+ BL::RegionView3D& b_rv3d,
+ int width, int height,
+ BoundBox2D *view_box,
+ BoundBox2D *cam_box);
+
+static void blender_camera_from_view(BlenderCamera *bcam,
+ BL::RenderEngine& b_engine,
+ BL::Scene& b_scene,
+ BL::SpaceView3D& b_v3d,
+ BL::RegionView3D& b_rv3d,
+ int width, int height,
+ bool skip_panorama = false)
{
/* 3d view parameters */
bcam->nearclip = b_v3d.clip_start();
bcam->farclip = b_v3d.clip_end();
bcam->lens = b_v3d.lens();
bcam->shuttertime = b_scene.render().motion_blur_shutter();
- curvemapping_to_array(b_scene.render().motion_blur_shutter_curve(),
- bcam->shutter_curve,
- RAMP_TABLE_SIZE);
+
+ BL::CurveMapping b_shutter_curve(b_scene.render().motion_blur_shutter_curve());
+ curvemapping_to_array(b_shutter_curve, bcam->shutter_curve, RAMP_TABLE_SIZE);
if(b_rv3d.view_perspective() == BL::RegionView3D::view_perspective_CAMERA) {
/* camera view */
@@ -587,8 +608,16 @@ static void blender_camera_from_view(BlenderCamera *bcam, BL::RenderEngine b_eng
/* in panorama camera view, we map viewplane to camera border */
BoundBox2D view_box, cam_box;
- blender_camera_view_subset(b_engine, b_scene.render(), b_scene, b_ob, b_v3d, b_rv3d, width, height,
- &view_box, &cam_box);
+ BL::RenderSettings b_render_settings(b_scene.render());
+ blender_camera_view_subset(b_engine,
+ b_render_settings,
+ b_scene,
+ b_ob,
+ b_v3d,
+ b_rv3d,
+ width, height,
+ &view_box,
+ &cam_box);
bcam->pano_viewplane = view_box.make_relative_to(cam_box);
}
@@ -625,8 +654,15 @@ static void blender_camera_from_view(BlenderCamera *bcam, BL::RenderEngine b_eng
bcam->matrix = transform_inverse(get_transform(b_rv3d.view_matrix()));
}
-static void blender_camera_view_subset(BL::RenderEngine b_engine, BL::RenderSettings b_render, BL::Scene b_scene, BL::Object b_ob, BL::SpaceView3D b_v3d,
- BL::RegionView3D b_rv3d, int width, int height, BoundBox2D *view_box, BoundBox2D *cam_box)
+static void blender_camera_view_subset(BL::RenderEngine& b_engine,
+ BL::RenderSettings& b_render,
+ BL::Scene& b_scene,
+ BL::Object& b_ob,
+ BL::SpaceView3D& b_v3d,
+ BL::RegionView3D& b_rv3d,
+ int width, int height,
+ BoundBox2D *view_box,
+ BoundBox2D *cam_box)
{
BoundBox2D cam, view;
float view_aspect, cam_aspect, sensor_size;
@@ -652,12 +688,12 @@ static void blender_camera_view_subset(BL::RenderEngine b_engine, BL::RenderSett
*cam_box = cam * (1.0f/cam_aspect);
}
-static void blender_camera_border_subset(BL::RenderEngine b_engine,
- BL::RenderSettings b_render,
- BL::Scene b_scene,
- BL::SpaceView3D b_v3d,
- BL::RegionView3D b_rv3d,
- BL::Object b_ob,
+static void blender_camera_border_subset(BL::RenderEngine& b_engine,
+ BL::RenderSettings& b_render,
+ BL::Scene& b_scene,
+ BL::SpaceView3D& b_v3d,
+ BL::RegionView3D& b_rv3d,
+ BL::Object& b_ob,
int width, int height,
const BoundBox2D &border,
BoundBox2D *result)
@@ -672,8 +708,13 @@ static void blender_camera_border_subset(BL::RenderEngine b_engine,
*result = cam_box.subset(border);
}
-static void blender_camera_border(BlenderCamera *bcam, BL::RenderEngine b_engine, BL::RenderSettings b_render, BL::Scene b_scene, BL::SpaceView3D b_v3d,
- BL::RegionView3D b_rv3d, int width, int height)
+static void blender_camera_border(BlenderCamera *bcam,
+ BL::RenderEngine& b_engine,
+ BL::RenderSettings& b_render,
+ BL::Scene& b_scene,
+ BL::SpaceView3D& b_v3d,
+ BL::RegionView3D& b_rv3d,
+ int width, int height)
{
bool is_camera_view;
@@ -733,17 +774,34 @@ static void blender_camera_border(BlenderCamera *bcam, BL::RenderEngine b_engine
bcam->border.clamp();
}
-void BlenderSync::sync_view(BL::SpaceView3D b_v3d, BL::RegionView3D b_rv3d, int width, int height)
+void BlenderSync::sync_view(BL::SpaceView3D& b_v3d,
+ BL::RegionView3D& b_rv3d,
+ int width, int height)
{
BlenderCamera bcam;
- blender_camera_init(&bcam, b_scene.render());
- blender_camera_from_view(&bcam, b_engine, b_scene, b_v3d, b_rv3d, width, height);
- blender_camera_border(&bcam, b_engine, b_scene.render(), b_scene, b_v3d, b_rv3d, width, height);
-
+ BL::RenderSettings b_render_settings(b_scene.render());
+ blender_camera_init(&bcam, b_render_settings);
+ blender_camera_from_view(&bcam,
+ b_engine,
+ b_scene,
+ b_v3d,
+ b_rv3d,
+ width, height);
+ blender_camera_border(&bcam,
+ b_engine,
+ b_render_settings,
+ b_scene,
+ b_v3d,
+ b_rv3d,
+ width, height);
blender_camera_sync(scene->camera, &bcam, width, height);
}
-BufferParams BlenderSync::get_buffer_params(BL::RenderSettings b_render, BL::SpaceView3D b_v3d, BL::RegionView3D b_rv3d, Camera *cam, int width, int height)
+BufferParams BlenderSync::get_buffer_params(BL::RenderSettings& b_render,
+ BL::SpaceView3D& b_v3d,
+ BL::RegionView3D& b_rv3d,
+ Camera *cam,
+ int width, int height)
{
BufferParams params;
bool use_border = false;