libgstgl: eagl: handle CALayer resize
authorAlessandro Decina <alessandro.d@gmail.com>
Tue, 24 Feb 2015 03:23:49 +0000 (14:23 +1100)
committerTim-Philipp Müller <tim@centricular.com>
Sat, 9 Dec 2017 19:31:55 +0000 (19:31 +0000)
gst-libs/gst/gl/eagl/gstglcontext_eagl.h
gst-libs/gst/gl/eagl/gstglcontext_eagl.m
gst-libs/gst/gl/eagl/gstglwindow_eagl.m

index fca5177..b621b35 100644 (file)
@@ -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);
index ab86912..e01fa62 100644 (file)
@@ -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)
index c54c7bc..edb0cb4 100644 (file)
@@ -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);
     }
   }