void InputBinder::bind_scene_entities_inputs( const Scene& scene, const SymbolTable& scene_symbols) { // Bind environment EDFs inputs. for (each<EnvironmentEDFContainer> i = scene.environment_edfs(); i; ++i) { EnvironmentEDF& environment_edf = *i; bind_scene_entity_inputs( scene, scene_symbols, SymbolTable::symbol_name(SymbolTable::SymbolEnvironmentEDF), environment_edf.get_name(), environment_edf.get_parameters(), environment_edf.get_inputs()); } // Bind environment shaders inputs. for (each<EnvironmentShaderContainer> i = scene.environment_shaders(); i; ++i) { EnvironmentShader& environment_shader = *i; bind_scene_entity_inputs( scene, scene_symbols, SymbolTable::symbol_name(SymbolTable::SymbolEnvironmentShader), environment_shader.get_name(), environment_shader.get_parameters(), environment_shader.get_inputs()); } // Bind environment inputs. if (scene.get_environment()) { scene.get_environment()->bind_entities( scene.environment_edfs(), scene.environment_shaders()); } }
void InputBinder::bind_scene_entities_inputs( const Scene& scene, const SymbolTable& scene_symbols) { // Bind textures to texture instances. // Other entities might need to access the textures bound to texture instances, // so binding of textures to texture instances must come first. for (each<TextureInstanceContainer> i = scene.texture_instances(); i; ++i) { i->unbind_texture(); i->bind_texture(scene.textures()); i->check_texture(); } // Bind the inputs of the default surface shader. bind_scene_entity_inputs( scene, scene_symbols, SymbolTable::symbol_name(SymbolTable::SymbolSurfaceShader), *scene.get_default_surface_shader()); // Bind camera inputs. if (scene.get_camera()) { bind_scene_entity_inputs( scene, scene_symbols, SymbolTable::symbol_name(SymbolTable::SymbolCamera), *scene.get_camera()); } // Bind environment EDFs inputs. for (each<EnvironmentEDFContainer> i = scene.environment_edfs(); i; ++i) { bind_scene_entity_inputs( scene, scene_symbols, SymbolTable::symbol_name(SymbolTable::SymbolEnvironmentEDF), *i); } // Bind environment shaders inputs. for (each<EnvironmentShaderContainer> i = scene.environment_shaders(); i; ++i) { bind_scene_entity_inputs( scene, scene_symbols, SymbolTable::symbol_name(SymbolTable::SymbolEnvironmentShader), *i); } // Bind environment inputs. if (scene.get_environment()) { bind_scene_entity_inputs( scene, scene_symbols, SymbolTable::symbol_name(SymbolTable::SymbolEnvironment), *scene.get_environment()); } // Bind assemblies to assembly instances. for (each<AssemblyInstanceContainer> i = scene.assembly_instances(); i; ++i) { i->unbind_assembly(); i->bind_assembly(scene.assemblies()); i->check_assembly(); } }