Exemplo n.º 1
0
void scene::set_location(const char *name)
{
    nya_render::texture::set_default_aniso(2);

    if (!m_curve.is_valid())
    {
        m_curve.create();
        load("postprocess.txt");
        set_texture("color_curve", m_curve);
        set_shader_param("screen_radius", nya_math::vec4(1.185185, 0.5 * 4.0 / 3.0, 0.0, 0.0));
        set_shader_param("damage_frame", nya_math::vec4(0.35, 0.5, 1.0, 0.1));
        m_flare.init(get_texture("main_color"), get_texture("main_depth"));
        m_cockpit_black.load("shaders/cockpit_black.nsh");
        m_cockpit_black_quad.init();
        m_missile_trails_renderer.init();
        m_particles_render.init();
    }

    if (is_native_location(name))
    {
        auto &zip = get_native_location_provider(name);
        auto tex = load_texture(zip, "tonecurve.tga");
        if (tex.get_width() > 0)
        {
            auto rtex = tex.internal().get_shared_data()->tex;
            rtex.set_wrap(nya_render::texture::wrap_clamp, nya_render::texture::wrap_clamp);
            m_curve.set(tex);
        }
        else
            m_curve.set(load_tonecurve("Map/tonecurve_default.tcb"));
    }
    else
    {
        if (m_location_name == "def" || m_location_name.empty())
            m_curve.set(load_tonecurve("Map/tonecurve_default.tcb"));
        else
            m_curve.set(load_tonecurve(("Map/tonecurve_" + m_location_name + ".tcb").c_str()));
    }

    world::set_location(name);

    for (auto &a: m_aircrafts)
        a->apply_location(m_location_name.c_str(), m_location.get_params());

    m_flare.apply_location(m_location.get_params());

    auto &p = m_location.get_params();
    set_shader_param("bloom_param", nya_math::vec4(p.hdr.bloom_threshold, p.hdr.bloom_offset, p.hdr.bloom_scale, 1.0));
    set_shader_param("saturation", nya_math::vec4(p.tone_saturation * 0.01, 0.0, 0.0, 0.0));
    m_luminance_speed = p.hdr.luminance_speed;
    m_fade_time = m_fade_max_time = 2000;
}
Exemplo n.º 2
0
bool sky_mesh::load(const char *name)
{
    if (!name)
        return false;

    renderer::sph t;

    if (is_native_location(name))
    {
        auto &p = get_native_location_provider(name);
        nya_memory::tmp_buffer_scoped res(load_resource(p.access("sky.sph")));
        t.load(res.get_data(), res.get_size());
    }
    else
        t.load((std::string("Map/sph_") + name + ".sph").c_str());

    renderer::sph::color_table ct(t.data[0]);

    solid_sphere s(64000.0, ct);

    m_mesh.set_vertex_data(&s.vertices[0], sizeof(solid_sphere::vert), (unsigned int)s.vertices.size());
    m_mesh.set_colors(sizeof(solid_sphere::vert::pos), 3);
    m_mesh.set_index_data(&s.indices[0], nya_render::vbo::index2b, (unsigned int)s.indices.size());

    auto dithering = shared::get_texture(shared::load_texture("PostProcess/dithering.nut"));

    m_material.get_default_pass().set_shader(nya_scene::shader("shaders/sky.nsh"));
    m_material.get_default_pass().get_state().zwrite = false;
    m_material.set_texture("dithering", dithering);

    m_fog_color.x = ct.fog_color.r * hdr_k;
    m_fog_color.y = ct.fog_color.g * hdr_k;
    m_fog_color.z = ct.fog_color.b * hdr_k;

    return true;
}