mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-25 09:40:37 +00:00
eglglessink: More cleanup and making the element reusable
This commit is contained in:
parent
56b711bd29
commit
d91621d2ce
2 changed files with 27 additions and 4 deletions
|
@ -1055,16 +1055,34 @@ gst_eglglessink_stop (GstBaseSink * sink)
|
||||||
glDeleteBuffers (1, &eglglessink->vdata);
|
glDeleteBuffers (1, &eglglessink->vdata);
|
||||||
glDeleteBuffers (1, &eglglessink->tdata);
|
glDeleteBuffers (1, &eglglessink->tdata);
|
||||||
glDeleteBuffers (1, &eglglessink->idata);
|
glDeleteBuffers (1, &eglglessink->idata);
|
||||||
|
eglglessink->have_vbo = FALSE;
|
||||||
|
|
||||||
glDeleteShader (eglglessink->fragshader);
|
glDeleteShader (eglglessink->fragshader);
|
||||||
glDeleteShader (eglglessink->vertshader);
|
glDeleteShader (eglglessink->vertshader);
|
||||||
|
|
||||||
glDeleteTextures (eglglessink->n_textures, eglglessink->texture);
|
glDeleteTextures (eglglessink->n_textures, eglglessink->texture);
|
||||||
|
eglglessink->have_texture = FALSE;
|
||||||
|
eglglessink->n_textures = 0;
|
||||||
|
|
||||||
glDeleteProgram (eglglessink->program);
|
glDeleteProgram (eglglessink->program);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (eglglessink->using_own_window)
|
if (eglglessink->surface) {
|
||||||
|
eglDestroySurface (eglglessink->display, eglglessink->surface);
|
||||||
|
eglglessink->surface = NULL;
|
||||||
|
eglglessink->have_surface = FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (eglglessink->context) {
|
||||||
|
eglDestroyContext (eglglessink->display, eglglessink->context);
|
||||||
|
eglglessink->context = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (eglglessink->using_own_window) {
|
||||||
platform_destroy_native_window (eglglessink->display, eglglessink->window);
|
platform_destroy_native_window (eglglessink->display, eglglessink->window);
|
||||||
|
eglglessink->window = NULL;
|
||||||
|
eglglessink->have_window = FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
@ -1256,7 +1274,14 @@ gst_eglglessink_setup_vbo (GstEglGlesSink * eglglessink, gboolean reset)
|
||||||
GST_INFO_OBJECT (eglglessink, "VBO setup. have_vbo:%d, should reset %d",
|
GST_INFO_OBJECT (eglglessink, "VBO setup. have_vbo:%d, should reset %d",
|
||||||
eglglessink->have_vbo, reset);
|
eglglessink->have_vbo, reset);
|
||||||
|
|
||||||
if (!eglglessink->have_vbo || reset) {
|
if (eglglessink->have_vbo && reset) {
|
||||||
|
glDeleteBuffers (1, &eglglessink->vdata);
|
||||||
|
glDeleteBuffers (1, &eglglessink->tdata);
|
||||||
|
glDeleteBuffers (1, &eglglessink->idata);
|
||||||
|
eglglessink->have_vbo = FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!eglglessink->have_vbo) {
|
||||||
GST_DEBUG_OBJECT (eglglessink, "Performing VBO setup");
|
GST_DEBUG_OBJECT (eglglessink, "Performing VBO setup");
|
||||||
eglglessink->coordarray[0].x = 1;
|
eglglessink->coordarray[0].x = 1;
|
||||||
eglglessink->coordarray[0].y = 1;
|
eglglessink->coordarray[0].y = 1;
|
||||||
|
@ -2370,7 +2395,6 @@ gst_eglglessink_init (GstEglGlesSink * eglglessink,
|
||||||
eglglessink->have_vbo = FALSE;
|
eglglessink->have_vbo = FALSE;
|
||||||
eglglessink->have_texture = FALSE;
|
eglglessink->have_texture = FALSE;
|
||||||
eglglessink->egl_started = FALSE;
|
eglglessink->egl_started = FALSE;
|
||||||
eglglessink->running = FALSE; /* XXX: unused */
|
|
||||||
eglglessink->can_create_window = TRUE;
|
eglglessink->can_create_window = TRUE;
|
||||||
eglglessink->force_rendering_slow = FALSE;
|
eglglessink->force_rendering_slow = FALSE;
|
||||||
eglglessink->keep_aspect_ratio = TRUE;
|
eglglessink->keep_aspect_ratio = TRUE;
|
||||||
|
|
|
@ -149,7 +149,6 @@ struct _GstEglGlesSink
|
||||||
gboolean have_vbo;
|
gboolean have_vbo;
|
||||||
gboolean have_texture;
|
gboolean have_texture;
|
||||||
gboolean egl_started;
|
gboolean egl_started;
|
||||||
gboolean running;
|
|
||||||
|
|
||||||
GstEglGlesSinkRenderingPath rendering_path;
|
GstEglGlesSinkRenderingPath rendering_path;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue