Changeset View
Changeset View
Standalone View
Standalone View
intern/cycles/render/background.cpp
| Show First 20 Lines • Show All 61 Lines • ▼ Show 20 Lines | |||||
| } | } | ||||
| void Background::device_update(Device *device, DeviceScene *dscene, Scene *scene) | void Background::device_update(Device *device, DeviceScene *dscene, Scene *scene) | ||||
| { | { | ||||
| if (!is_modified()) | if (!is_modified()) | ||||
| return; | return; | ||||
| scoped_callback_timer timer([scene](double time) { | scoped_callback_timer timer([scene](double time) { | ||||
| if (scene->update_stats) { | if (scene->get_update_stats()) { | ||||
| scene->update_stats->background.times.add_entry({"device_update", time}); | scene->get_update_stats()->background.times.add_entry({"device_update", time}); | ||||
| } | } | ||||
| }); | }); | ||||
| device_free(device, dscene); | device_free(device, dscene); | ||||
| Shader *bg_shader = get_shader(scene); | Shader *bg_shader = get_shader(scene); | ||||
| /* set shader index and transparent option */ | /* set shader index and transparent option */ | ||||
| KernelBackground *kbackground = &dscene->data.background; | KernelBackground *kbackground = &dscene->data.background; | ||||
| kbackground->ao_factor = (use_ao) ? ao_factor : 0.0f; | kbackground->ao_factor = (use_ao) ? ao_factor : 0.0f; | ||||
| kbackground->ao_bounces_factor = ao_factor; | kbackground->ao_bounces_factor = ao_factor; | ||||
| kbackground->ao_distance = ao_distance; | kbackground->ao_distance = ao_distance; | ||||
| kbackground->transparent = transparent; | kbackground->transparent = transparent; | ||||
| kbackground->surface_shader = scene->shader_manager->get_shader_id(bg_shader); | kbackground->surface_shader = scene->get_shader_manager()->get_shader_id(bg_shader); | ||||
| if (transparent && transparent_glass) { | if (transparent && transparent_glass) { | ||||
| /* Square twice, once for principled BSDF convention, and once for | /* Square twice, once for principled BSDF convention, and once for | ||||
| * faster comparison in kernel with anisotropic roughness. */ | * faster comparison in kernel with anisotropic roughness. */ | ||||
| kbackground->transparent_roughness_squared_threshold = sqr( | kbackground->transparent_roughness_squared_threshold = sqr( | ||||
| sqr(transparent_roughness_threshold)); | sqr(transparent_roughness_threshold)); | ||||
| } | } | ||||
| else { | else { | ||||
| kbackground->transparent_roughness_squared_threshold = -1.0f; | kbackground->transparent_roughness_squared_threshold = -1.0f; | ||||
| } | } | ||||
| if (bg_shader->has_volume) | if (bg_shader->get_has_volume()) | ||||
| kbackground->volume_shader = kbackground->surface_shader; | kbackground->volume_shader = kbackground->surface_shader; | ||||
| else | else | ||||
| kbackground->volume_shader = SHADER_NONE; | kbackground->volume_shader = SHADER_NONE; | ||||
| kbackground->volume_step_size = volume_step_size * scene->integrator->get_volume_step_rate(); | kbackground->volume_step_size = volume_step_size * | ||||
| scene->get_integrator()->get_volume_step_rate(); | |||||
| /* No background node, make world shader invisible to all rays, to skip evaluation in kernel. */ | /* No background node, make world shader invisible to all rays, to skip evaluation in kernel. */ | ||||
| if (bg_shader->graph->nodes.size() <= 1) { | if (bg_shader->get_graph()->get_nodes().size() <= 1) { | ||||
| kbackground->surface_shader |= SHADER_EXCLUDE_ANY; | kbackground->surface_shader |= SHADER_EXCLUDE_ANY; | ||||
| } | } | ||||
| /* Background present, check visibilities */ | /* Background present, check visibilities */ | ||||
| else { | else { | ||||
| if (!(visibility & PATH_RAY_DIFFUSE)) | if (!(visibility & PATH_RAY_DIFFUSE)) | ||||
| kbackground->surface_shader |= SHADER_EXCLUDE_DIFFUSE; | kbackground->surface_shader |= SHADER_EXCLUDE_DIFFUSE; | ||||
| if (!(visibility & PATH_RAY_GLOSSY)) | if (!(visibility & PATH_RAY_GLOSSY)) | ||||
| kbackground->surface_shader |= SHADER_EXCLUDE_GLOSSY; | kbackground->surface_shader |= SHADER_EXCLUDE_GLOSSY; | ||||
| Show All 9 Lines | |||||
| } | } | ||||
| void Background::device_free(Device * /*device*/, DeviceScene * /*dscene*/) | void Background::device_free(Device * /*device*/, DeviceScene * /*dscene*/) | ||||
| { | { | ||||
| } | } | ||||
| void Background::tag_update(Scene *scene) | void Background::tag_update(Scene *scene) | ||||
| { | { | ||||
| scene->integrator->tag_update(scene); | scene->get_integrator()->tag_update(scene); | ||||
| tag_modified(); | tag_modified(); | ||||
| } | } | ||||
| Shader *Background::get_shader(const Scene *scene) | Shader *Background::get_shader(const Scene *scene) | ||||
| { | { | ||||
| return (use_shader) ? ((shader) ? shader : scene->default_background) : scene->default_empty; | return (use_shader) ? ((shader) ? shader : scene->get_default_background()) : | ||||
| scene->get_default_empty(); | |||||
| } | } | ||||
| CCL_NAMESPACE_END | CCL_NAMESPACE_END | ||||