+ init(s, RGB8, 1);
+}
+
+EnvironmentMap::EnvironmentMap(unsigned s, PixelFormat f, Renderable &r, Renderable &e):
+ Effect(r),
+ environment(e),
+ irradiance_shprog(Resources::get_global().get<Program>("_envmap_irradiance.glsl.shader")),
+ specular_shprog(Resources::get_global().get<Program>("_envmap_specular.glsl.shader")),
+ fullscreen_mesh(Resources::get_global().get<Mesh>("_fullscreen_quad.mesh")),
+ sampler(Resources::get_global().get<Sampler>("_linear_clamp.samp")),
+ mip_sampler(Resources::get_global().get<Sampler>("_mip_clamp.samp"))
+{
+ init(s, f, 1);
+}
+
+EnvironmentMap::EnvironmentMap(unsigned s, PixelFormat f, unsigned l, Renderable &r, Renderable &e):
+ Effect(r),
+ environment(e),
+ irradiance_shprog(Resources::get_global().get<Program>("_envmap_irradiance.glsl.shader")),
+ specular_shprog(Resources::get_global().get<Program>("_envmap_specular.glsl.shader")),
+ fullscreen_mesh(Resources::get_global().get<Mesh>("_fullscreen_quad.mesh")),
+ sampler(Resources::get_global().get<Sampler>("_linear_clamp.samp")),
+ mip_sampler(Resources::get_global().get<Sampler>("_mip_clamp.samp"))
+{
+ init(s, f, l);
+}
+
+void EnvironmentMap::init(unsigned s, PixelFormat f, unsigned l)
+{
+ if(!l || (1U<<(l-1))>=s)
+ throw invalid_argument("EnvironmentMap::EnvironmentMap");
+
+ size = s;
+ rendered = false;
+ update_interval = 1;
+ update_delay = 0;
+
+ env_tex.storage(f, size, l);