if(l>1)
{
specular_fbos.resize(l-1);
- for(unsigned i=1; i<l; ++i)
+ for(unsigned i=0; i+1<l; ++i)
{
- specular_fbos[i-1].set_format((COLOR_ATTACHMENT,f));
- specular_fbos[i-1].attach_layered(COLOR_ATTACHMENT, env_tex, i);
+ specular_fbos[i].set_format((COLOR_ATTACHMENT,f));
+ specular_fbos[i].attach_layered(COLOR_ATTACHMENT, env_tex, i+1);
}
LinAl::Matrix<float, 3, 3> face_matrices[6];
prefilter_shdata.uniform("roughness", 1.0f);
}
- shdata.uniform("env_world_matrix", LinAl::SquareMatrix<float, 3>::identity());
+ shdata.uniform("env_world_matrix", LinAl::Matrix<float, 3, 3>::identity());
}
void EnvironmentMap::set_fixed_position(const Vector3 &p)
environment.render(renderer);
}
+ renderer.set_pipeline_key(this);
renderer.set_framebuffer(&irradiance_fbo);
renderer.set_shader_program(&irradiance_shprog, &prefilter_shdata);
- renderer.set_texture("environment_map", &env_tex, &sampler);
+ renderer.set_texture("environment_map", &env_tex, 0, &sampler);
fullscreen_mesh.draw(renderer);
renderer.set_shader_program(&specular_shprog);
for(unsigned i=0; i<specular_fbos.size(); ++i)
{
prefilter_shdata.uniform("roughness", 1.0f-sqrt(1.0f-static_cast<float>(i+1)/specular_fbos.size()));
+ renderer.set_pipeline_key(this, 1+i);
renderer.set_framebuffer(&specular_fbos[i]);
fullscreen_mesh.draw(renderer);
}
env_map->set_fixed_position(fixed_position);
env_map->set_depth_clip(near_clip, far_clip);
+ create_base(*env_map);
+
return env_map.release();
}