X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=effect_chain.cpp;h=f88a4f74986fce003ca4cf0b745c3becdbc018c0;hb=6dea8d2a6695a45aa6209425cdcfb4eabf704340;hp=e68895d7b8f40c8c30475b8f51e0e49c7f39a473;hpb=b5a446a44ee1f0379e8427f86f5dfa0d40bc0e60;p=movit diff --git a/effect_chain.cpp b/effect_chain.cpp index e68895d..f88a4f7 100644 --- a/effect_chain.cpp +++ b/effect_chain.cpp @@ -29,7 +29,6 @@ EffectChain::EffectChain(float aspect_nom, float aspect_denom) : aspect_nom(aspect_nom), aspect_denom(aspect_denom), dither_effect(NULL), - fbo(0), num_dither_bits(0), finalized(false) {} @@ -48,9 +47,6 @@ EffectChain::~EffectChain() glDeleteShader(phases[i]->fragment_shader); delete phases[i]; } - if (fbo != 0) { - glDeleteFramebuffers(1, &fbo); - } } Input *EffectChain::add_input(Input *input) @@ -1433,8 +1429,6 @@ void EffectChain::finalize() // since otherwise this turns into an (albeit simple) // register allocation problem. if (phases.size() > 1) { - glGenFramebuffers(1, &fbo); - for (unsigned i = 0; i < phases.size() - 1; ++i) { inform_input_sizes(phases[i]); find_output_size(phases[i]); @@ -1473,6 +1467,7 @@ void EffectChain::render_to_fbo(GLuint dest_fbo, unsigned width, unsigned height // Save original viewport. GLuint x = 0, y = 0; + GLuint fbo = 0; if (width == 0 && height == 0) { GLint viewport[4]; @@ -1499,6 +1494,8 @@ void EffectChain::render_to_fbo(GLuint dest_fbo, unsigned width, unsigned height glLoadIdentity(); if (phases.size() > 1) { + glGenFramebuffers(1, &fbo); + check_error(); glBindFramebuffer(GL_FRAMEBUFFER, fbo); check_error(); } @@ -1614,4 +1611,12 @@ void EffectChain::render_to_fbo(GLuint dest_fbo, unsigned width, unsigned height node->effect->clear_gl_state(); } } + + glBindFramebuffer(GL_FRAMEBUFFER, 0); + check_error(); + + if (fbo != 0) { + glDeleteFramebuffers(1, &fbo); + check_error(); + } }