: aspect_nom(aspect_nom),
aspect_denom(aspect_denom),
dither_effect(NULL),
- fbo(0),
num_dither_bits(0),
finalized(false) {}
glDeleteShader(phases[i]->fragment_shader);
delete phases[i];
}
- if (fbo != 0) {
- glDeleteFramebuffers(1, &fbo);
- }
}
Input *EffectChain::add_input(Input *input)
Node *EffectChain::add_node(Effect *effect)
{
+ for (unsigned i = 0; i < nodes.size(); ++i) {
+ assert(nodes[i]->effect != effect);
+ }
+
char effect_id[256];
sprintf(effect_id, "eff%u", (unsigned)nodes.size());
// 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]);
// Save original viewport.
GLuint x = 0, y = 0;
+ GLuint fbo = 0;
if (width == 0 && height == 0) {
GLint viewport[4];
glLoadIdentity();
if (phases.size() > 1) {
+ glGenFramebuffers(1, &fbo);
+ check_error();
glBindFramebuffer(GL_FRAMEBUFFER, fbo);
check_error();
}
node->effect->clear_gl_state();
}
}
+
+ glBindFramebuffer(GL_FRAMEBUFFER, 0);
+ check_error();
+
+ if (fbo != 0) {
+ glDeleteFramebuffers(1, &fbo);
+ check_error();
+ }
}