quad(get_fullscreen_quad())
{
blur_shader.attach_shader(get_fullscreen_vertex_shader());
- blur_shader.attach_shader_owned(new Shader(FRAGMENT_SHADER, blur_fs));
+ blur_shader.attach_shader_owned(new FragmentShader(blur_fs));
+ blur_shader.bind_attribute(get_component_type(VERTEX2), "vertex");
blur_shader.link();
combine_shader.attach_shader(get_fullscreen_vertex_shader());
- combine_shader.attach_shader_owned(new Shader(FRAGMENT_SHADER, combine_fs));
+ combine_shader.attach_shader_owned(new FragmentShader(combine_fs));
+ combine_shader.bind_attribute(get_component_type(VERTEX2), "vertex");
combine_shader.link();
blur_shdata[0].uniform("delta", 1.0f/w, 0.0f);
for(unsigned i=0; i<2; ++i)
{
tex[i].set_min_filter(NEAREST);
+ tex[i].set_wrap(CLAMP_TO_EDGE);
tex[i].storage(RGB16F, w, h);
+ fbo[i].attach(COLOR_ATTACHMENT0, tex[i], 0);
+ fbo[i].require_complete();
}
combine_shdata.uniform("source", 1);
void Bloom::set_radius(float r)
{
if(r<=0.0f)
- throw out_of_range("Bloom::set_radius");
+ throw invalid_argument("Bloom::set_radius");
int size = min(static_cast<int>(r*3.0f), 9);
blur_shdata_common.uniform("size", size);
for(int i=0; i<=size*2; ++i)
factors[i] /= sum;
- blur_shdata_common.uniform1_array("factors[0]", size*2+1, &factors.front());
+ blur_shdata_common.uniform1_array("factors", size*2+1, &factors.front());
}
void Bloom::set_strength(float s)
{
if(s<0.0f || s>1.0f)
- throw out_of_range("Bloom::set_strength");
+ throw invalid_argument("Bloom::set_strength");
combine_shdata.uniform("strength", s);
}
void Bloom::render(const Texture2D &src, const Texture2D &)
{
- Bind unbind_dtest(static_cast<DepthTest *>(0), true);
- Bind unbind_blend(static_cast<Blend *>(0), true);
+ BindRestore unbind_dtest(static_cast<DepthTest *>(0));
+ BindRestore unbind_blend(static_cast<Blend *>(0));
+ Bind bind_mesh(quad);
{
Bind bind_shader(blur_shader);
blur_shdata_common.apply();
- Bind bind_fbo(fbo, true);
for(unsigned i=0; i<2; ++i)
{
+ BindRestore bind_fbo(fbo[i]);
Bind bind_tex(i ? tex[0] : src);
- fbo.attach(COLOR_ATTACHMENT0, tex[i], 0);
blur_shdata[i].apply();
quad.draw();
}