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; }
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; }