Changeset View
Changeset View
Standalone View
Standalone View
intern/cycles/render/scene.cpp
| Show First 20 Lines • Show All 104 Lines • ▼ Show 20 Lines | Scene::Scene(const SceneParams ¶ms_, Device *device) | ||||
| light_manager = new LightManager(); | light_manager = new LightManager(); | ||||
| geometry_manager = new GeometryManager(); | geometry_manager = new GeometryManager(); | ||||
| 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(); | ||||
| bake_manager = new BakeManager(); | bake_manager = new BakeManager(); | ||||
| Pass::add(PASS_COMBINED, passes); | |||||
brecht: This could be moved into a `film->add_default(this);` function like we have for the shader… | |||||
| /* OSL only works on the CPU */ | /* OSL only works on the CPU */ | ||||
| if (device->info.has_osl) | if (device->info.has_osl) | ||||
| shader_manager = ShaderManager::create(params.shadingsystem); | shader_manager = ShaderManager::create(params.shadingsystem); | ||||
| else | else | ||||
| shader_manager = ShaderManager::create(SHADINGSYSTEM_SVM); | shader_manager = ShaderManager::create(SHADINGSYSTEM_SVM); | ||||
| shader_manager->add_default(this); | shader_manager->add_default(this); | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 191 Lines • ▼ Show 20 Lines | VLOG(1) << "System memory statistics after full device sync:\n" | ||||
| << string_human_readable_size(mem_peak) << ")"; | << string_human_readable_size(mem_peak) << ")"; | ||||
| } | } | ||||
| } | } | ||||
| Scene::MotionType Scene::need_motion() | Scene::MotionType Scene::need_motion() | ||||
| { | { | ||||
| if (integrator->motion_blur) | if (integrator->motion_blur) | ||||
| return MOTION_BLUR; | return MOTION_BLUR; | ||||
| else if (Pass::contains(film->passes, PASS_MOTION)) | else if (Pass::contains(passes, PASS_MOTION)) | ||||
| return MOTION_PASS; | return MOTION_PASS; | ||||
| else | else | ||||
| return MOTION_NONE; | return MOTION_NONE; | ||||
| } | } | ||||
| float Scene::motion_shutter_time() | float Scene::motion_shutter_time() | ||||
| { | { | ||||
| if (need_motion() == Scene::MOTION_PASS) | if (need_motion() == Scene::MOTION_PASS) | ||||
| return 2.0f; | return 2.0f; | ||||
| else | else | ||||
| return camera->shuttertime; | return camera->shuttertime; | ||||
| } | } | ||||
| bool Scene::need_global_attribute(AttributeStandard std) | bool Scene::need_global_attribute(AttributeStandard std) | ||||
| { | { | ||||
| if (std == ATTR_STD_UV) | if (std == ATTR_STD_UV) | ||||
| return Pass::contains(film->passes, PASS_UV); | return Pass::contains(passes, PASS_UV); | ||||
| else if (std == ATTR_STD_MOTION_VERTEX_POSITION) | else if (std == ATTR_STD_MOTION_VERTEX_POSITION) | ||||
| return need_motion() != MOTION_NONE; | return need_motion() != MOTION_NONE; | ||||
| else if (std == ATTR_STD_MOTION_VERTEX_NORMAL) | else if (std == ATTR_STD_MOTION_VERTEX_NORMAL) | ||||
| return need_motion() == MOTION_BLUR; | return need_motion() == MOTION_BLUR; | ||||
| return false; | return false; | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 45 Lines • ▼ Show 20 Lines | |||||
| } | } | ||||
| void Scene::collect_statistics(RenderStats *stats) | void Scene::collect_statistics(RenderStats *stats) | ||||
| { | { | ||||
| geometry_manager->collect_statistics(this, stats); | geometry_manager->collect_statistics(this, stats); | ||||
| image_manager->collect_statistics(stats); | image_manager->collect_statistics(stats); | ||||
| } | } | ||||
| void Scene::tag_passes_update(Scene *scene, const vector<Pass> &passes_, bool update_passes) | |||||
| { | |||||
| if (Pass::contains(passes, PASS_UV) != Pass::contains(passes_, PASS_UV)) { | |||||
| scene->geometry_manager->tag_update(scene); | |||||
| foreach (Shader *shader, scene->shaders) | |||||
| shader->need_update_geometry = true; | |||||
| } | |||||
| else if (Pass::contains(passes, PASS_MOTION) != Pass::contains(passes_, PASS_MOTION)) { | |||||
| scene->geometry_manager->tag_update(scene); | |||||
| } | |||||
| else if (Pass::contains(passes, PASS_AO) != Pass::contains(passes_, PASS_AO)) { | |||||
| scene->integrator->tag_update(scene); | |||||
| } | |||||
| if (update_passes) { | |||||
| passes = passes_; | |||||
| } | |||||
| } | |||||
| int Scene::get_aov_offset(string name, bool &is_color) | |||||
| { | |||||
| int num_color = 0, num_value = 0; | |||||
| foreach (const Pass &pass, passes) { | |||||
| if (pass.type == PASS_AOV_COLOR) { | |||||
| num_color++; | |||||
| } | |||||
| else if (pass.type == PASS_AOV_VALUE) { | |||||
| num_value++; | |||||
| } | |||||
| else { | |||||
| continue; | |||||
| } | |||||
| if (pass.name == name) { | |||||
| is_color = (pass.type == PASS_AOV_COLOR); | |||||
| return (is_color ? num_color : num_value) - 1; | |||||
| } | |||||
| } | |||||
| return -1; | |||||
| } | |||||
brechtUnsubmitted Not Done Inline ActionsI'd put these two functions in Film. brecht: I'd put these two functions in Film. | |||||
| CCL_NAMESPACE_END | CCL_NAMESPACE_END | ||||
This could be moved into a film->add_default(this); function like we have for the shader manager.