GST_DEBUG_FUNCPTR (gst_gl_window_android_egl_get_window_handle);
window_class->set_window_handle =
GST_DEBUG_FUNCPTR (gst_gl_window_android_egl_set_window_handle);
- window_class->draw_unlocked =
- GST_DEBUG_FUNCPTR (gst_gl_window_android_egl_draw);
window_class->draw = GST_DEBUG_FUNCPTR (gst_gl_window_android_egl_draw);
}
GST_DEBUG_FUNCPTR (gst_gl_window_cocoa_get_window_handle);
window_class->set_window_handle =
GST_DEBUG_FUNCPTR (gst_gl_window_cocoa_set_window_handle);
- window_class->draw_unlocked = GST_DEBUG_FUNCPTR (gst_gl_window_cocoa_draw);
window_class->draw = GST_DEBUG_FUNCPTR (gst_gl_window_cocoa_draw);
window_class->set_preferred_size =
GST_DEBUG_FUNCPTR (gst_gl_window_cocoa_set_preferred_size);
GST_DEBUG_FUNCPTR (gst_gl_window_eagl_get_window_handle);
window_class->set_window_handle =
GST_DEBUG_FUNCPTR (gst_gl_window_eagl_set_window_handle);
- window_class->draw_unlocked = GST_DEBUG_FUNCPTR (gst_gl_window_eagl_draw);
window_class->draw = GST_DEBUG_FUNCPTR (gst_gl_window_eagl_draw);
window_class->set_preferred_size =
GST_DEBUG_FUNCPTR (gst_gl_window_eagl_set_preferred_size);
klass->close = GST_DEBUG_FUNCPTR (gst_gl_window_default_close);
klass->run = GST_DEBUG_FUNCPTR (gst_gl_window_default_run);
klass->quit = GST_DEBUG_FUNCPTR (gst_gl_window_default_quit);
- klass->draw_unlocked = GST_DEBUG_FUNCPTR (gst_gl_window_default_draw);
klass->draw = GST_DEBUG_FUNCPTR (gst_gl_window_default_draw);
klass->send_message = GST_DEBUG_FUNCPTR (gst_gl_window_default_send_message);
klass->send_message_async =
gst_gl_window_send_message (window, (GstGLWindowCB) draw_cb, window);
}
-
-/**
- * gst_gl_window_draw_unlocked:
- * @window: a #GstGLWindow
- *
- * Redraw the window contents. Implementations should invoke the draw callback.
- *
- * Since: 1.4
- */
-void
-gst_gl_window_draw_unlocked (GstGLWindow * window)
-{
- GstGLWindowClass *window_class;
-
- g_return_if_fail (GST_GL_IS_WINDOW (window));
- window_class = GST_GL_WINDOW_GET_CLASS (window);
- g_return_if_fail (window_class->draw_unlocked != NULL);
-
- window_class->draw_unlocked (window);
-
- window->queue_resize = FALSE;
-}
-
/**
* gst_gl_window_draw:
* @window: a #GstGLWindow
* @set_window_handle: Set a window to render into
* @get_window_handle: Gets the current window that this #GstGLWindow is
* rendering into
- * @draw_unlocked: redraw the window with the specified dimensions
* @draw: redraw the window with the specified dimensions
* @run: run the mainloop
* @quit: send a quit to the mainloop
guintptr (*get_display) (GstGLWindow *window);
void (*set_window_handle) (GstGLWindow *window, guintptr id);
guintptr (*get_window_handle) (GstGLWindow *window);
- void (*draw_unlocked) (GstGLWindow *window);
void (*draw) (GstGLWindow *window);
void (*run) (GstGLWindow *window);
void (*quit) (GstGLWindow *window);
/* surfaces/rendering */
void gst_gl_window_queue_resize (GstGLWindow *window);
-void gst_gl_window_draw_unlocked (GstGLWindow *window);
void gst_gl_window_draw (GstGLWindow *window);
void gst_gl_window_show (GstGLWindow *window);
void gst_gl_window_set_preferred_size (GstGLWindow * window,
GST_DEBUG_FUNCPTR (gst_gl_window_wayland_egl_get_window_handle);
window_class->set_window_handle =
GST_DEBUG_FUNCPTR (gst_gl_window_wayland_egl_set_window_handle);
- window_class->draw_unlocked =
- GST_DEBUG_FUNCPTR (gst_gl_window_wayland_egl_draw);
window_class->show = GST_DEBUG_FUNCPTR (gst_gl_window_wayland_egl_show);
window_class->draw = GST_DEBUG_FUNCPTR (gst_gl_window_wayland_egl_draw);
window_class->close = GST_DEBUG_FUNCPTR (gst_gl_window_wayland_egl_close);
window_class->set_window_handle =
GST_DEBUG_FUNCPTR (gst_gl_window_win32_set_window_handle);
- window_class->draw_unlocked = GST_DEBUG_FUNCPTR (gst_gl_window_win32_draw);
window_class->draw = GST_DEBUG_FUNCPTR (gst_gl_window_win32_draw);
window_class->get_display =
GST_DEBUG_FUNCPTR (gst_gl_window_win32_get_display);
static void gst_gl_window_x11_set_preferred_size (GstGLWindow * window,
gint width, gint height);
void gst_gl_window_x11_show (GstGLWindow * window);
-void gst_gl_window_x11_draw_unlocked (GstGLWindow * window);
void gst_gl_window_x11_draw (GstGLWindow * window);
gboolean gst_gl_window_x11_create_context (GstGLWindow * window,
GstGLAPI gl_api, guintptr external_gl_context, GError ** error);
GST_DEBUG_FUNCPTR (gst_gl_window_x11_set_window_handle);
window_class->get_window_handle =
GST_DEBUG_FUNCPTR (gst_gl_window_x11_get_window_handle);
- window_class->draw_unlocked =
- GST_DEBUG_FUNCPTR (gst_gl_window_x11_draw_unlocked);
window_class->draw = GST_DEBUG_FUNCPTR (gst_gl_window_x11_draw);
window_class->open = GST_DEBUG_FUNCPTR (gst_gl_window_x11_open);
window_class->close = GST_DEBUG_FUNCPTR (gst_gl_window_x11_close);
gst_gl_window_send_message (window, (GstGLWindowCB) _show_window, window);
}
-/* Called in the gl thread */
-void
-gst_gl_window_x11_draw_unlocked (GstGLWindow * window)
-{
- GstGLWindowX11 *window_x11 = GST_GL_WINDOW_X11 (window);
-
- if (gst_gl_window_is_running (GST_GL_WINDOW (window_x11))
- && window_x11->allow_extra_expose_events) {
- if (window->queue_resize) {
- guint width, height;
-
- gst_gl_window_get_surface_dimensions (window, &width, &height);
- gst_gl_window_resize (window, width, height);
- }
-
- if (window->draw) {
- GstGLContext *context = gst_gl_window_get_context (window);
- GstGLContextClass *context_class = GST_GL_CONTEXT_GET_CLASS (context);
-
- window->draw (window->draw_data);
- context_class->swap_buffers (context);
-
- gst_object_unref (context);
- }
- }
-}
-
static void
draw_cb (gpointer data)
{
GstGLWindowX11 *window_x11 = data;
+ GstGLWindow *window = GST_GL_WINDOW (window_x11);
- if (gst_gl_window_is_running (GST_GL_WINDOW (window_x11))) {
+ if (gst_gl_window_is_running (window)) {
XWindowAttributes attr;
XGetWindowAttributes (window_x11->device, window_x11->internal_win_id,
}
}
- gst_gl_window_x11_draw_unlocked (GST_GL_WINDOW (window_x11));
+ if (window_x11->allow_extra_expose_events) {
+ if (window->queue_resize) {
+ guint width, height;
+
+ gst_gl_window_get_surface_dimensions (window, &width, &height);
+ gst_gl_window_resize (window, width, height);
+ }
+
+ if (window->draw) {
+ GstGLContext *context = gst_gl_window_get_context (window);
+ GstGLContextClass *context_class = GST_GL_CONTEXT_GET_CLASS (context);
+
+ window->draw (window->draw_data);
+ context_class->swap_buffers (context);
+
+ gst_object_unref (context);
+ }
+ }
}
}