namespace GL {
AmbientOcclusion::AmbientOcclusion(unsigned w, unsigned h, float):
- occlude_target(w, h, (RENDER_COLOR,RED)),
+ 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(RGBA, 4, 4, 1);
- rotate_lookup.get_default_sampler().set_filter(NEAREST);
+ rotate_lookup.storage(RGBA8, 4, 4, 1);
unsigned char data[64];
for(unsigned i=0; i<16; ++i)
{
data[i*4+2] = 255-s;
data[i*4+3] = ((i+i/4)%2)*255;
}
- rotate_lookup.image(0, RGBA, UNSIGNED_BYTE, data);
+ 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);
}