examples/sdlshare: Initialize GL as part of the event loop
authorSebastian Dröge <sebastian@centricular.com>
Wed, 13 Mar 2019 07:28:58 +0000 (08:28 +0100)
committerSebastian Dröge <sebastian@centricular.com>
Mon, 30 Sep 2019 10:29:58 +0000 (13:29 +0300)
And unref additional buffers we never use for rendering directly instead
of going via the output queue.

tests/examples/gl/sdl/sdlshare.c

index 8a5512f..441c1d6 100644 (file)
@@ -216,6 +216,8 @@ sdl_event_loop (GstBus * bus)
   SDL_GL_MakeCurrent (sdl_window, sdl_gl_context);
   SDL_GL_SetSwapInterval (1);
 
+  InitGL (640, 480);
+
   while (!quit) {
     SDL_Event event;
 
@@ -270,9 +272,14 @@ sdl_event_loop (GstBus * bus)
       }
     }
 
+    if (buf) {
+      g_async_queue_push (queue_output_buf, buf);
+      buf = NULL;
+    }
+
     while (g_async_queue_length (queue_input_buf) > 3) {
       if (buf)
-        g_async_queue_push (queue_output_buf, buf);
+        gst_buffer_unref (buf);
       buf = (GstBuffer *) g_async_queue_pop (queue_input_buf);
     }
 
@@ -329,13 +336,11 @@ main (int argc, char **argv)
     return -1;
   }
 
+  /* Create GL context and a wrapped GStreamer context around it */
   sdl_gl_context = SDL_GL_CreateContext (sdl_window);
 
   SDL_GL_MakeCurrent (sdl_window, sdl_gl_context);
 
-  /* Loop, drawing and checking events */
-  InitGL (640, 480);
-
 #ifdef WIN32
   gl_context = wglGetCurrentContext ();
   sdl_dc = wglGetCurrentDC ();