X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fbloom.cpp;h=6484d052fdb2691b80747cd3965bc2925a799517;hp=c7bfd467418b12f58cc3eb9c08afb46878a143c0;hb=HEAD;hpb=47bfbdc8cf844aa079995fca34a3b906b49a4f66 diff --git a/source/bloom.cpp b/source/bloom.cpp deleted file mode 100644 index c7bfd467..00000000 --- a/source/bloom.cpp +++ /dev/null @@ -1,111 +0,0 @@ -#include -#include -#include "blend.h" -#include "bloom.h" -#include "misc.h" -#include "renderer.h" -#include "shader.h" -#include "tests.h" -#include "texunit.h" - -using namespace std; - -namespace Msp { -namespace GL { - -Bloom::Bloom(unsigned w, unsigned h): - blur_shader("bloom_blur.glsl"), - combine_shader("bloom_combine.glsl"), - quad(get_fullscreen_quad()) -{ - blur_shdata[0].uniform("delta", 1.0f/w, 0.0f); - blur_shdata[1].uniform("delta", 0.0f, 1.0f/h); - - for(unsigned i=0; i<2; ++i) - target[i] = new RenderTarget(w, h, (RENDER_COLOR,RGB16F)); - target[1]->set_texture_filter(LINEAR); - - common_shdata.uniform("source", 0); - common_shdata.uniform("blurred", 1); - - combine_texturing.attach(1, target[1]->get_target_texture(RENDER_COLOR)); - - set_radius(2.0f); - set_strength(0.2f); -} - -Bloom::~Bloom() -{ - for(unsigned i=0; i<2; ++i) - delete target[i]; -} - -void Bloom::set_radius(float r) -{ - if(r<=0.0f) - throw invalid_argument("Bloom::set_radius"); - - int size = min(static_cast(r*3.0f), 9); - common_shdata.uniform("size", size); - - vector factors(size*2+1); - float sum = 0.0f; - r = 2*r*r; - for(int i=-size; i<=size; ++i) - sum += (factors[size+i] = exp(-i*i/r)); - for(int i=0; i<=size*2; ++i) - factors[i] /= sum; - - common_shdata.uniform1_array("factors", size*2+1, &factors.front()); -} - -void Bloom::set_strength(float s) -{ - if(s<0.0f || s>1.0f) - throw invalid_argument("Bloom::set_strength"); - common_shdata.uniform("strength", s); -} - -void Bloom::render(Renderer &renderer, const Texture2D &src, const Texture2D &) -{ - Renderer::Push push(renderer); - renderer.set_shader_program(&blur_shader, &common_shdata); - for(unsigned i=0; i<2; ++i) - { - BindRestore bind_fbo(target[i]->get_framebuffer()); - Renderer::Push push2(renderer); - renderer.set_texture(i ? &target[0]->get_target_texture(RENDER_COLOR) : &src); - renderer.add_shader_data(blur_shdata[i]); - quad->draw(renderer); - } - - combine_texturing.attach(0, src); - renderer.set_texturing(&combine_texturing); - renderer.set_shader_program(&combine_shader); - quad->draw(renderer); -} - - -Bloom::Template::Template(): - radius(2.0f), - strength(0.2f) -{ } - -Bloom *Bloom::Template::create(unsigned width, unsigned height) const -{ - RefPtr bloom = new Bloom(width/size_divisor, height/size_divisor); - bloom->set_radius(radius); - bloom->set_strength(strength); - return bloom.release(); -} - - -Bloom::Template::Loader::Loader(Template &t): - DataFile::DerivedObjectLoader(t) -{ - add("strength", &Template::strength); - add("radius", &Template::radius); -} - -} // namespace GL -} // namespace Msp