X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Feffects%2Fambientocclusion.cpp;h=d23469edf8aeeac20a0a62cf285e47dde551f019;hp=bae5e780d1b08c64ea538aa3cd991310044b4277;hb=fe2fc291a4fc618425c64112c9ffd3519f0b8a3e;hpb=dccad64b2ec82249d850b9745614042171499972 diff --git a/source/effects/ambientocclusion.cpp b/source/effects/ambientocclusion.cpp index bae5e780..d23469ed 100644 --- a/source/effects/ambientocclusion.cpp +++ b/source/effects/ambientocclusion.cpp @@ -12,16 +12,14 @@ using namespace std; namespace Msp { namespace GL { -AmbientOcclusion::AmbientOcclusion(Resources &resources, unsigned w, unsigned h, float): +AmbientOcclusion::AmbientOcclusion(unsigned w, unsigned h, float): occlude_target(w, h, (RENDER_COLOR,R8)), - occlude_shader(resources.get("_ambientocclusion_occlude.glsl.shader")), - combine_shader(resources.get("_ambientocclusion_combine.glsl.shader")), - quad(resources.get("_fullscreen_quad.mesh")), - linear_sampler(resources.get("_linear_clamp.samp")), - nearest_sampler(resources.get("_nearest_clamp.samp")) + occlude_shader(Resources::get_global().get("_ambientocclusion_occlude.glsl.shader")), + combine_shader(Resources::get_global().get("_ambientocclusion_combine.glsl.shader")), + quad(Resources::get_global().get("_fullscreen_quad.mesh")), + linear_sampler(Resources::get_global().get("_linear_clamp.samp")), + nearest_sampler(Resources::get_global().get("_nearest_clamp.samp")) { - texturing.attach(2, occlude_target.get_target_texture(RENDER_COLOR), &linear_sampler); - unsigned seed = 1; rotate_lookup.storage(RGBA8, 4, 4, 1); unsigned char data[64]; @@ -37,12 +35,6 @@ AmbientOcclusion::AmbientOcclusion(Resources &resources, unsigned w, unsigned h, } rotate_lookup.image(0, data); - texturing.attach(3, rotate_lookup, &nearest_sampler); - - shdata.uniform("source", 0); - shdata.uniform("depth", 1); - shdata.uniform("occlusion", 2); - shdata.uniform("rotate", 3); shdata.uniform("inverse_projection", Matrix()); set_n_samples(16); @@ -92,14 +84,14 @@ void AmbientOcclusion::set_edge_depth_threshold(float edt) void AmbientOcclusion::render(Renderer &renderer, const Texture2D &color, const Texture2D &depth) { - texturing.attach(0, color, &nearest_sampler); - texturing.attach(1, depth, &nearest_sampler); - if(renderer.get_camera()) shdata.uniform("inverse_projection", invert(renderer.get_camera()->get_projection_matrix())); Renderer::Push push(renderer); - renderer.set_texturing(&texturing); + renderer.set_texture("source", &color, &nearest_sampler); + renderer.set_texture("depth", &depth, &nearest_sampler); + renderer.set_texture("occlusion", &occlude_target.get_target_texture(RENDER_COLOR), &linear_sampler); + renderer.set_texture("rotate", &rotate_lookup, &nearest_sampler); renderer.set_shader_program(&occlude_shader, &shdata); { @@ -119,9 +111,9 @@ AmbientOcclusion::Template::Template(): edge_depth_threshold(0.1f) { } -AmbientOcclusion *AmbientOcclusion::Template::create(Resources &res, unsigned width, unsigned height) const +AmbientOcclusion *AmbientOcclusion::Template::create(unsigned width, unsigned height) const { - RefPtr ao = new AmbientOcclusion(res, width/size_divisor, height/size_divisor); + RefPtr ao = new AmbientOcclusion(width/size_divisor, height/size_divisor); ao->set_n_samples(n_samples); ao->set_occlusion_radius(occlusion_radius); ao->set_darkness(darkness);