mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-21 13:36:39 +00:00
eglglessink: Improve cleanup
This commit is contained in:
parent
70d077acd8
commit
113253b292
1 changed files with 39 additions and 15 deletions
|
@ -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) {
|
||||||
|
|
Loading…
Reference in a new issue