X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fambientocclusion.cpp;h=ed7d1636d711d34ee6539fd4ddb11adbb4677f44;hp=5aba53dde9231b02decd1bf302d04f0ada796cac;hb=HEAD;hpb=072bbbd579cb82b4571cbb6babebe6e5ea498356 diff --git a/source/ambientocclusion.cpp b/source/ambientocclusion.cpp deleted file mode 100644 index 5aba53dd..00000000 --- a/source/ambientocclusion.cpp +++ /dev/null @@ -1,92 +0,0 @@ -#define _USE_MATH_DEFINES -#include -#include "ambientocclusion.h" -#include "blend.h" -#include "shader.h" -#include "tests.h" - -namespace Msp { -namespace GL { - -AmbientOcclusion::AmbientOcclusion(unsigned w, unsigned h, float depth_ratio): - occlude_shader("ambientocclusion_occlude.glsl"), - combine_shader("ambientocclusion_combine.glsl"), - quad(get_fullscreen_quad()) -{ - occlusion.storage(RGB, w, h); - occlusion.set_min_filter(NEAREST); - occlusion.set_mag_filter(NEAREST); - occlusion.set_wrap(CLAMP_TO_EDGE); - fbo.attach(COLOR_ATTACHMENT0, occlusion, 0); - fbo.require_complete(); - - combine_texturing.attach(2, occlusion); - - rotate_lookup.storage(RGBA, 4, 4); - rotate_lookup.set_min_filter(NEAREST); - rotate_lookup.set_mag_filter(NEAREST); - unsigned char data[64]; - for(unsigned i=0; i<16; ++i) - { - float a = ((i*541)%16)*M_PI/32; - float c = cos(a); - float s = sin(a); - data[i*3 ] = static_cast(127+c*127); - data[i*3+1] = static_cast(127+s*127); - data[i*3+2] = static_cast(127-s*127); - data[i*3+4] = static_cast(127+c*127); - } - rotate_lookup.image(0, RGBA, UNSIGNED_BYTE, data); - - occlude_texturing.attach(1, rotate_lookup); - - occlude_shdata.uniform("depth", 0); - occlude_shdata.uniform("rotate", 1); - occlude_shdata.uniform("screen_size", static_cast(w), static_cast(h)); - - combine_shdata.uniform("source", 1); - combine_shdata.uniform("depth", 0); - combine_shdata.uniform("occlusion", 2); - combine_shdata.uniform("screen_size", static_cast(w), static_cast(h)); - - set_depth_ratio(depth_ratio); - set_darkness(1.5); -} - -void AmbientOcclusion::set_depth_ratio(float depth_ratio) -{ - depth_ratio = 1/depth_ratio; - - occlude_shdata.uniform("depth_ratio", depth_ratio, 1+depth_ratio); - combine_shdata.uniform("depth_ratio", depth_ratio, 1+depth_ratio); -} - -void AmbientOcclusion::set_darkness(float darkness) -{ - occlude_shdata.uniform("darkness", darkness); -} - -void AmbientOcclusion::render(const Texture2D &color, const Texture2D &depth) -{ - occlude_texturing.attach(0, depth); - combine_texturing.attach(0, depth); - combine_texturing.attach(1, color); - - Bind bind_mesh(quad); - - { - BindRestore bind_fbo(fbo); - Bind bind_tex(occlude_texturing); - Bind bind_shader(occlude_shader); - occlude_shdata.apply(); - quad.draw(); - } - - Bind bind_tex(combine_texturing); - Bind bind_shader(combine_shader); - combine_shdata.apply(); - quad.draw(); -} - -} // namespace GL -} // namespace Msp