forked from bartvdbraak/blender
Code refactor: pass device to scene, check OSL with device info.
This commit is contained in:
parent
cc96cdd9d4
commit
ae41f38f78
@ -97,27 +97,9 @@ static BufferParams& session_buffer_params()
|
|||||||
return buffer_params;
|
return buffer_params;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void session_init()
|
|
||||||
{
|
|
||||||
options.session = new Session(options.session_params);
|
|
||||||
options.session->reset(session_buffer_params(), options.session_params.samples);
|
|
||||||
options.session->scene = options.scene;
|
|
||||||
|
|
||||||
if(options.session_params.background && !options.quiet)
|
|
||||||
options.session->progress.set_update_callback(function_bind(&session_print_status));
|
|
||||||
#ifdef WITH_CYCLES_STANDALONE_GUI
|
|
||||||
else
|
|
||||||
options.session->progress.set_update_callback(function_bind(&view_redraw));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
options.session->start();
|
|
||||||
|
|
||||||
options.scene = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void scene_init()
|
static void scene_init()
|
||||||
{
|
{
|
||||||
options.scene = new Scene(options.scene_params, options.session_params.device);
|
options.scene = new Scene(options.scene_params, options.session->device);
|
||||||
|
|
||||||
/* Read XML */
|
/* Read XML */
|
||||||
xml_read_file(options.scene, options.filepath.c_str());
|
xml_read_file(options.scene, options.filepath.c_str());
|
||||||
@ -136,6 +118,25 @@ static void scene_init()
|
|||||||
options.scene->camera->compute_auto_viewplane();
|
options.scene->camera->compute_auto_viewplane();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void session_init()
|
||||||
|
{
|
||||||
|
options.session = new Session(options.session_params);
|
||||||
|
options.session->reset(session_buffer_params(), options.session_params.samples);
|
||||||
|
|
||||||
|
if(options.session_params.background && !options.quiet)
|
||||||
|
options.session->progress.set_update_callback(function_bind(&session_print_status));
|
||||||
|
#ifdef WITH_CYCLES_STANDALONE_GUI
|
||||||
|
else
|
||||||
|
options.session->progress.set_update_callback(function_bind(&view_redraw));
|
||||||
|
#endif
|
||||||
|
|
||||||
|
options.session->start();
|
||||||
|
|
||||||
|
/* load scene */
|
||||||
|
scene_init();
|
||||||
|
options.session->scene = options.scene;
|
||||||
|
}
|
||||||
|
|
||||||
static void session_exit()
|
static void session_exit()
|
||||||
{
|
{
|
||||||
if(options.session) {
|
if(options.session) {
|
||||||
@ -430,7 +431,6 @@ static void options_parse(int argc, const char **argv)
|
|||||||
/* find matching device */
|
/* find matching device */
|
||||||
DeviceType device_type = Device::type_from_string(devicename.c_str());
|
DeviceType device_type = Device::type_from_string(devicename.c_str());
|
||||||
vector<DeviceInfo>& devices = Device::available_devices();
|
vector<DeviceInfo>& devices = Device::available_devices();
|
||||||
DeviceInfo device_info;
|
|
||||||
bool device_available = false;
|
bool device_available = false;
|
||||||
|
|
||||||
foreach(DeviceInfo& device, devices) {
|
foreach(DeviceInfo& device, devices) {
|
||||||
@ -467,9 +467,6 @@ static void options_parse(int argc, const char **argv)
|
|||||||
|
|
||||||
/* For smoother Viewport */
|
/* For smoother Viewport */
|
||||||
options.session_params.start_resolution = 64;
|
options.session_params.start_resolution = 64;
|
||||||
|
|
||||||
/* load scene */
|
|
||||||
scene_init();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CCL_NAMESPACE_END
|
CCL_NAMESPACE_END
|
||||||
|
@ -124,14 +124,6 @@ void BlenderSession::create_session()
|
|||||||
last_progress = -1.0f;
|
last_progress = -1.0f;
|
||||||
start_resize_time = 0.0;
|
start_resize_time = 0.0;
|
||||||
|
|
||||||
/* create scene */
|
|
||||||
scene = new Scene(scene_params, session_params.device);
|
|
||||||
|
|
||||||
/* setup callbacks for builtin image support */
|
|
||||||
scene->image_manager->builtin_image_info_cb = function_bind(&BlenderSession::builtin_image_info, this, _1, _2, _3, _4, _5, _6, _7, _8);
|
|
||||||
scene->image_manager->builtin_image_pixels_cb = function_bind(&BlenderSession::builtin_image_pixels, this, _1, _2, _3, _4, _5);
|
|
||||||
scene->image_manager->builtin_image_float_pixels_cb = function_bind(&BlenderSession::builtin_image_float_pixels, this, _1, _2, _3, _4, _5);
|
|
||||||
|
|
||||||
/* create session */
|
/* create session */
|
||||||
session = new Session(session_params);
|
session = new Session(session_params);
|
||||||
session->scene = scene;
|
session->scene = scene;
|
||||||
@ -139,6 +131,16 @@ void BlenderSession::create_session()
|
|||||||
session->progress.set_cancel_callback(function_bind(&BlenderSession::test_cancel, this));
|
session->progress.set_cancel_callback(function_bind(&BlenderSession::test_cancel, this));
|
||||||
session->set_pause(session_pause);
|
session->set_pause(session_pause);
|
||||||
|
|
||||||
|
/* create scene */
|
||||||
|
scene = new Scene(scene_params, session->device);
|
||||||
|
|
||||||
|
/* setup callbacks for builtin image support */
|
||||||
|
scene->image_manager->builtin_image_info_cb = function_bind(&BlenderSession::builtin_image_info, this, _1, _2, _3, _4, _5, _6, _7, _8);
|
||||||
|
scene->image_manager->builtin_image_pixels_cb = function_bind(&BlenderSession::builtin_image_pixels, this, _1, _2, _3, _4, _5);
|
||||||
|
scene->image_manager->builtin_image_float_pixels_cb = function_bind(&BlenderSession::builtin_image_float_pixels, this, _1, _2, _3, _4, _5);
|
||||||
|
|
||||||
|
session->scene = scene;
|
||||||
|
|
||||||
/* create sync */
|
/* create sync */
|
||||||
sync = new BlenderSync(b_engine, b_data, b_scene, scene, !background, session->progress);
|
sync = new BlenderSync(b_engine, b_data, b_scene, scene, !background, session->progress);
|
||||||
BL::Object b_camera_override(b_engine.camera_override());
|
BL::Object b_camera_override(b_engine.camera_override());
|
||||||
|
@ -380,10 +380,13 @@ DeviceInfo Device::get_multi_device(const vector<DeviceInfo>& subdevices, int th
|
|||||||
info.has_bindless_textures = true;
|
info.has_bindless_textures = true;
|
||||||
info.has_volume_decoupled = true;
|
info.has_volume_decoupled = true;
|
||||||
info.has_qbvh = true;
|
info.has_qbvh = true;
|
||||||
|
info.has_osl = true;
|
||||||
|
|
||||||
foreach(const DeviceInfo &device, subdevices) {
|
foreach(const DeviceInfo &device, subdevices) {
|
||||||
info.has_bindless_textures &= device.has_bindless_textures;
|
info.has_bindless_textures &= device.has_bindless_textures;
|
||||||
info.has_volume_decoupled &= device.has_volume_decoupled;
|
info.has_volume_decoupled &= device.has_volume_decoupled;
|
||||||
info.has_qbvh &= device.has_qbvh;
|
info.has_qbvh &= device.has_qbvh;
|
||||||
|
info.has_osl &= device.has_osl;
|
||||||
|
|
||||||
if(device.type == DEVICE_CPU && subdevices.size() > 1) {
|
if(device.type == DEVICE_CPU && subdevices.size() > 1) {
|
||||||
if(background) {
|
if(background) {
|
||||||
|
@ -57,6 +57,7 @@ public:
|
|||||||
bool has_bindless_textures; /* flag for GPU and Multi device */
|
bool has_bindless_textures; /* flag for GPU and Multi device */
|
||||||
bool has_volume_decoupled;
|
bool has_volume_decoupled;
|
||||||
bool has_qbvh;
|
bool has_qbvh;
|
||||||
|
bool has_osl;
|
||||||
bool use_split_kernel; /* Denotes if the device is going to run cycles using split-kernel */
|
bool use_split_kernel; /* Denotes if the device is going to run cycles using split-kernel */
|
||||||
int cpu_threads;
|
int cpu_threads;
|
||||||
vector<DeviceInfo> multi_devices;
|
vector<DeviceInfo> multi_devices;
|
||||||
@ -72,6 +73,7 @@ public:
|
|||||||
has_bindless_textures = false;
|
has_bindless_textures = false;
|
||||||
has_volume_decoupled = false;
|
has_volume_decoupled = false;
|
||||||
has_qbvh = false;
|
has_qbvh = false;
|
||||||
|
has_osl = false;
|
||||||
use_split_kernel = false;
|
use_split_kernel = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1028,6 +1028,7 @@ void device_cpu_info(vector<DeviceInfo>& devices)
|
|||||||
info.advanced_shading = true;
|
info.advanced_shading = true;
|
||||||
info.has_qbvh = system_cpu_support_sse2();
|
info.has_qbvh = system_cpu_support_sse2();
|
||||||
info.has_volume_decoupled = true;
|
info.has_volume_decoupled = true;
|
||||||
|
info.has_osl = true;
|
||||||
|
|
||||||
devices.insert(devices.begin(), info);
|
devices.insert(devices.begin(), info);
|
||||||
}
|
}
|
||||||
|
@ -348,6 +348,7 @@ void device_network_info(vector<DeviceInfo>& devices)
|
|||||||
info.advanced_shading = true;
|
info.advanced_shading = true;
|
||||||
info.has_volume_decoupled = false;
|
info.has_volume_decoupled = false;
|
||||||
info.has_qbvh = false;
|
info.has_qbvh = false;
|
||||||
|
info.has_osl = false;
|
||||||
|
|
||||||
devices.push_back(info);
|
devices.push_back(info);
|
||||||
}
|
}
|
||||||
|
@ -40,10 +40,9 @@
|
|||||||
|
|
||||||
CCL_NAMESPACE_BEGIN
|
CCL_NAMESPACE_BEGIN
|
||||||
|
|
||||||
Scene::Scene(const SceneParams& params_, const DeviceInfo& device_info_)
|
Scene::Scene(const SceneParams& params_, Device *device)
|
||||||
: params(params_)
|
: device(device), params(params_)
|
||||||
{
|
{
|
||||||
device = NULL;
|
|
||||||
memset(&dscene.data, 0, sizeof(dscene.data));
|
memset(&dscene.data, 0, sizeof(dscene.data));
|
||||||
|
|
||||||
camera = new Camera();
|
camera = new Camera();
|
||||||
@ -54,13 +53,13 @@ Scene::Scene(const SceneParams& params_, const DeviceInfo& device_info_)
|
|||||||
mesh_manager = new MeshManager();
|
mesh_manager = new MeshManager();
|
||||||
object_manager = new ObjectManager();
|
object_manager = new ObjectManager();
|
||||||
integrator = new Integrator();
|
integrator = new Integrator();
|
||||||
image_manager = new ImageManager(device_info_);
|
image_manager = new ImageManager(device->info);
|
||||||
particle_system_manager = new ParticleSystemManager();
|
particle_system_manager = new ParticleSystemManager();
|
||||||
curve_system_manager = new CurveSystemManager();
|
curve_system_manager = new CurveSystemManager();
|
||||||
bake_manager = new BakeManager();
|
bake_manager = new BakeManager();
|
||||||
|
|
||||||
/* OSL only works on the CPU */
|
/* OSL only works on the CPU */
|
||||||
if(device_info_.type == DEVICE_CPU)
|
if(device->info.has_osl)
|
||||||
shader_manager = ShaderManager::create(this, params.shadingsystem);
|
shader_manager = ShaderManager::create(this, params.shadingsystem);
|
||||||
else
|
else
|
||||||
shader_manager = ShaderManager::create(this, SHADINGSYSTEM_SVM);
|
shader_manager = ShaderManager::create(this, SHADINGSYSTEM_SVM);
|
||||||
|
@ -201,7 +201,7 @@ public:
|
|||||||
/* mutex must be locked manually by callers */
|
/* mutex must be locked manually by callers */
|
||||||
thread_mutex mutex;
|
thread_mutex mutex;
|
||||||
|
|
||||||
Scene(const SceneParams& params, const DeviceInfo& device_info);
|
Scene(const SceneParams& params, Device *device);
|
||||||
~Scene();
|
~Scene();
|
||||||
|
|
||||||
void device_update(Device *device, Progress& progress);
|
void device_update(Device *device, Progress& progress);
|
||||||
|
Loading…
Reference in New Issue
Block a user