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.
This commit is contained in:
@@ -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_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_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;
|
||||
|
||||
Reference in New Issue
Block a user