// Now propagate from the inputs towards the end, and inform as we go.
// The rules are simple:
//
- // 1. Don't touch effects that already have given sizes (ie., inputs).
+ // 1. Don't touch effects that already have given sizes (ie., inputs
+ // or effects that change the output size).
// 2. If all of your inputs have the same size, that will be your output size.
// 3. Otherwise, your output size is 0x0.
for (unsigned i = 0; i < phase->effects.size(); ++i) {
this_output_height = 0;
}
}
- node->output_width = this_output_width;
- node->output_height = this_output_height;
+ if (node->effect->changes_output_size()) {
+ // We cannot call get_output_size() before we've done inform_input_size()
+ // on all inputs.
+ unsigned real_width_ignored, real_height_ignored;
+ node->effect->get_output_size(&real_width_ignored, &real_height_ignored,
+ &node->output_width, &node->output_height);
+ } else {
+ node->output_width = this_output_width;
+ node->output_height = this_output_height;
+ }
}
}
// Now draw!
float vertices[] = {
- 0.0f, 1.0f,
+ 0.0f, 2.0f,
0.0f, 0.0f,
- 1.0f, 1.0f,
- 1.0f, 0.0f
+ 2.0f, 0.0f
};
GLuint vao;
GLuint position_vbo = fill_vertex_attribute(glsl_program_num, "position", 2, GL_FLOAT, sizeof(vertices), vertices);
GLuint texcoord_vbo = fill_vertex_attribute(glsl_program_num, "texcoord", 2, GL_FLOAT, sizeof(vertices), vertices); // Same as vertices.
- glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
+ glDrawArrays(GL_TRIANGLES, 0, 3);
check_error();
cleanup_vertex_attribute(glsl_program_num, "position", position_vbo);