Ejemplo n.º 1
0
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());
    }
}
Ejemplo n.º 2
0
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();
    }
}