X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;ds=sidebyside;f=effect_chain.cpp;h=7d19ac3eb0df29861b5a19012d81d3f6d2810bde;hb=be698874e0dc281f8b3114165625125817ed565b;hp=c803c62b795a5160deccbc5c2e0fb7dc050fc638;hpb=f420ba91b26aad7701f781bf371f47662a19f452;p=movit diff --git a/effect_chain.cpp b/effect_chain.cpp index c803c62..7d19ac3 100644 --- a/effect_chain.cpp +++ b/effect_chain.cpp @@ -1470,6 +1470,7 @@ void EffectChain::render_to_fbo(GLuint dest_fbo, unsigned width, unsigned height } const GLuint glsl_program_num = phases[phase]->glsl_program_num; + check_error(); glUseProgram(glsl_program_num); check_error(); @@ -1536,43 +1537,37 @@ void EffectChain::render_to_fbo(GLuint dest_fbo, unsigned width, unsigned height // Now draw! float vertices[] = { + 0.0f, 1.0f, 0.0f, 0.0f, - 1.0f, 0.0f, 1.0f, 1.0f, - 0.0f, 1.0f + 1.0f, 0.0f }; - int position_attrib = glGetAttribLocation(glsl_program_num, "position"); - assert(position_attrib != -1); - glEnableVertexAttribArray(position_attrib); + GLuint vao; + glGenVertexArrays(1, &vao); check_error(); - glVertexAttribPointer(position_attrib, 2, GL_FLOAT, GL_FALSE, 0, vertices); + glBindVertexArray(vao); check_error(); - int texcoord_attrib = glGetAttribLocation(glsl_program_num, "texcoord"); - if (texcoord_attrib != -1) { - glEnableVertexAttribArray(texcoord_attrib); - check_error(); - glVertexAttribPointer(texcoord_attrib, 2, GL_FLOAT, GL_FALSE, 0, vertices); // Same as texcoords. - check_error(); - } + 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_QUADS, 0, 4); + glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); check_error(); + cleanup_vertex_attribute(glsl_program_num, "position", position_vbo); + cleanup_vertex_attribute(glsl_program_num, "texcoord", texcoord_vbo); + glUseProgram(0); check_error(); - glDisableVertexAttribArray(position_attrib); - check_error(); - if (texcoord_attrib != -1) { - glDisableVertexAttribArray(texcoord_attrib); - check_error(); - } for (unsigned i = 0; i < phases[phase]->effects.size(); ++i) { Node *node = phases[phase]->effects[i]; node->effect->clear_gl_state(); } + + glDeleteVertexArrays(1, &vao); + check_error(); } for (map::const_iterator texture_it = output_textures.begin();