diff --git a/gst-libs/gst/gl/eagl/gstglcontext_eagl.h b/gst-libs/gst/gl/eagl/gstglcontext_eagl.h index fca51772a2..b621b3504b 100644 --- a/gst-libs/gst/gl/eagl/gstglcontext_eagl.h +++ b/gst-libs/gst/gl/eagl/gstglcontext_eagl.h @@ -59,6 +59,7 @@ GType gst_gl_context_eagl_get_type (void); GstGLContextEagl * gst_gl_context_eagl_new (void); +void gst_gl_context_eagl_resize (GstGLContextEagl * eagl_context); void gst_gl_context_eagl_prepare_draw (GstGLContextEagl * context); void gst_gl_context_eagl_finish_draw (GstGLContextEagl * context); guintptr gst_gl_context_eagl_get_current_context (void); diff --git a/gst-libs/gst/gl/eagl/gstglcontext_eagl.m b/gst-libs/gst/gl/eagl/gstglcontext_eagl.m index ab86912773..e01fa62169 100644 --- a/gst-libs/gst/gl/eagl/gstglcontext_eagl.m +++ b/gst-libs/gst/gl/eagl/gstglcontext_eagl.m @@ -99,6 +99,22 @@ gst_gl_context_eagl_new (void) return context; } +void +gst_gl_context_eagl_resize (GstGLContextEagl * eagl_context) +{ + int width, height; + + glBindRenderbuffer (GL_RENDERBUFFER, eagl_context->priv->color_renderbuffer); + [eagl_context->priv->eagl_context renderbufferStorage:GL_RENDERBUFFER fromDrawable:eagl_context->priv->eagl_layer]; + glGetRenderbufferParameteriv (GL_RENDERBUFFER, + GL_RENDERBUFFER_WIDTH, &width); + glGetRenderbufferParameteriv (GL_RENDERBUFFER, + GL_RENDERBUFFER_HEIGHT, &height); + glBindRenderbuffer (GL_RENDERBUFFER, eagl_context->priv->depth_renderbuffer); + glRenderbufferStorage (GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, width, + height); +} + static gboolean gst_gl_context_eagl_create_context (GstGLContext * context, GstGLAPI gl_api, GstGLContext * other_context, GError ** error) diff --git a/gst-libs/gst/gl/eagl/gstglwindow_eagl.m b/gst-libs/gst/gl/eagl/gstglwindow_eagl.m index c54c7bc26e..edb0cb4c8b 100644 --- a/gst-libs/gst/gl/eagl/gstglwindow_eagl.m +++ b/gst-libs/gst/gl/eagl/gstglwindow_eagl.m @@ -244,14 +244,17 @@ draw_cb (gpointer data) eagl_layer = (CAEAGLLayer *)[window_eagl->priv->view layer]; size = eagl_layer.frame.size; - if (window_eagl->priv->window_width != window_eagl->priv->preferred_width || - window_eagl->priv->window_height != window_eagl->priv->preferred_height) { - window_eagl->priv->window_width = window_eagl->priv->preferred_width; - window_eagl->priv->window_height = window_eagl->priv->preferred_height; + if (window_eagl->priv->window_width != size.width || + window_eagl->priv->window_height != size.height) { + + window_eagl->priv->window_width = size.width; + window_eagl->priv->window_height = size.height; + + gst_gl_context_eagl_resize (eagl_context); if (window->resize) - window->resize (window->resize_data, window_eagl->priv->preferred_width, - window_eagl->priv->preferred_height); + window->resize (window->resize_data, window_eagl->priv->window_width, + window_eagl->priv->window_height); } }