eglglessink: Improve cleanup

This commit is contained in:
Sebastian Dröge 2012-10-02 17:29:26 +02:00
parent 70d077acd8
commit 113253b292

View file

@ -1042,20 +1042,32 @@ gst_eglglessink_stop (GstBaseSink * sink)
/* EGL/GLES2 cleanup */ /* EGL/GLES2 cleanup */
if (eglglessink->rendering_path == GST_EGLGLESSINK_RENDER_SLOW) { if (eglglessink->rendering_path == GST_EGLGLESSINK_RENDER_SLOW) {
glDeleteBuffers (1, &eglglessink->eglglesctx->position_buffer); glUseProgram (0);
glDeleteBuffers (1, &eglglessink->eglglesctx->texpos_buffer);
glDeleteBuffers (1, &eglglessink->eglglesctx->index_buffer);
eglglessink->have_vbo = FALSE;
glDeleteShader (eglglessink->eglglesctx->fragshader); if (eglglessink->have_vbo) {
glDeleteShader (eglglessink->eglglesctx->vertshader); glDeleteBuffers (1, &eglglessink->eglglesctx->position_buffer);
glDeleteBuffers (1, &eglglessink->eglglesctx->texpos_buffer);
glDeleteBuffers (1, &eglglessink->eglglesctx->index_buffer);
eglglessink->have_vbo = FALSE;
}
glDeleteTextures (eglglessink->eglglesctx->n_textures, if (eglglessink->have_texture) {
eglglessink->eglglesctx->texture); glDeleteTextures (eglglessink->eglglesctx->n_textures,
eglglessink->have_texture = FALSE; eglglessink->eglglesctx->texture);
eglglessink->eglglesctx->n_textures = 0; eglglessink->have_texture = FALSE;
eglglessink->eglglesctx->n_textures = 0;
}
glDeleteProgram (eglglessink->eglglesctx->glslprogram); if (eglglessink->eglglesctx->glslprogram) {
glDetachShader (eglglessink->eglglesctx->glslprogram,
eglglessink->eglglesctx->fragshader);
glDetachShader (eglglessink->eglglesctx->glslprogram,
eglglessink->eglglesctx->vertshader);
glDeleteProgram (eglglessink->eglglesctx->glslprogram);
glDeleteShader (eglglessink->eglglesctx->fragshader);
glDeleteShader (eglglessink->eglglesctx->vertshader);
eglglessink->eglglesctx->glslprogram = 0;
}
} }
if (eglglessink->eglglesctx->surface) { if (eglglessink->eglglesctx->surface) {
@ -1078,7 +1090,6 @@ gst_eglglessink_stop (GstBaseSink * sink)
eglglessink->have_window = FALSE; eglglessink->have_window = FALSE;
} }
eglglessink->eglglesctx->used_window = NULL; eglglessink->eglglesctx->used_window = NULL;
if (eglglessink->current_caps) { if (eglglessink->current_caps) {
gst_caps_unref (eglglessink->current_caps); gst_caps_unref (eglglessink->current_caps);
eglglessink->current_caps = NULL; eglglessink->current_caps = NULL;
@ -2203,21 +2214,34 @@ gst_eglglessink_setcaps (GstBaseSink * bsink, GstCaps * caps)
} }
GST_DEBUG_OBJECT (eglglessink, "Caps are not compatible, reconfiguring"); GST_DEBUG_OBJECT (eglglessink, "Caps are not compatible, reconfiguring");
if (eglglessink->rendering_path == GST_EGLGLESSINK_RENDER_SLOW) { if (eglglessink->rendering_path == GST_EGLGLESSINK_RENDER_SLOW) {
glUseProgram (0);
if (eglglessink->have_vbo) {
glDeleteBuffers (1, &eglglessink->eglglesctx->position_buffer); glDeleteBuffers (1, &eglglessink->eglglesctx->position_buffer);
glDeleteBuffers (1, &eglglessink->eglglesctx->texpos_buffer); glDeleteBuffers (1, &eglglessink->eglglesctx->texpos_buffer);
glDeleteBuffers (1, &eglglessink->eglglesctx->index_buffer); glDeleteBuffers (1, &eglglessink->eglglesctx->index_buffer);
eglglessink->have_vbo = FALSE; eglglessink->have_vbo = FALSE;
}
glDeleteShader (eglglessink->eglglesctx->fragshader); if (eglglessink->have_texture) {
glDeleteShader (eglglessink->eglglesctx->vertshader);
glDeleteTextures (eglglessink->eglglesctx->n_textures, glDeleteTextures (eglglessink->eglglesctx->n_textures,
eglglessink->eglglesctx->texture); eglglessink->eglglesctx->texture);
eglglessink->have_texture = FALSE; eglglessink->have_texture = FALSE;
eglglessink->eglglesctx->n_textures = 0; eglglessink->eglglesctx->n_textures = 0;
}
if (eglglessink->eglglesctx->glslprogram) {
glDetachShader (eglglessink->eglglesctx->glslprogram,
eglglessink->eglglesctx->fragshader);
glDetachShader (eglglessink->eglglesctx->glslprogram,
eglglessink->eglglesctx->vertshader);
glDeleteProgram (eglglessink->eglglesctx->glslprogram); glDeleteProgram (eglglessink->eglglesctx->glslprogram);
glDeleteShader (eglglessink->eglglesctx->fragshader);
glDeleteShader (eglglessink->eglglesctx->vertshader);
eglglessink->eglglesctx->glslprogram = 0;
}
} }
if (eglglessink->eglglesctx->surface) { if (eglglessink->eglglesctx->surface) {