occlude_target(w, h, (RENDER_COLOR,R8)),
occlude_shader("ambientocclusion_occlude.glsl"),
combine_shader("ambientocclusion_combine.glsl"),
- quad(get_fullscreen_quad())
+ quad(get_fullscreen_quad()),
+ linear_sampler(get_linear_sampler()),
+ nearest_sampler(get_nearest_sampler())
{
- occlude_target.set_texture_filter(LINEAR);
- texturing.attach(2, occlude_target.get_target_texture(RENDER_COLOR));
+ texturing.attach(2, occlude_target.get_target_texture(RENDER_COLOR), linear_sampler.get());
unsigned seed = 1;
rotate_lookup.storage(RGBA8, 4, 4, 1);
- rotate_lookup.get_default_sampler().set_filter(NEAREST);
unsigned char data[64];
for(unsigned i=0; i<16; ++i)
{
}
rotate_lookup.image(0, data);
- texturing.attach(3, rotate_lookup);
+ texturing.attach(3, rotate_lookup, nearest_sampler.get());
shdata.uniform("source", 0);
shdata.uniform("depth", 1);
void AmbientOcclusion::render(Renderer &renderer, const Texture2D &color, const Texture2D &depth)
{
- texturing.attach(0, color);
- texturing.attach(1, depth);
+ texturing.attach(0, color, nearest_sampler.get());
+ texturing.attach(1, depth, nearest_sampler.get());
if(renderer.get_camera())
shdata.uniform("inverse_projection", invert(renderer.get_camera()->get_projection_matrix()));
{
BindRestore bind_fbo(occlude_target.get_framebuffer());
- quad.draw(renderer);
+ quad->draw(renderer);
}
renderer.set_shader_program(&combine_shader);
- quad.draw(renderer);
+ quad->draw(renderer);
}