[676/906] windwo_win32: port to new API
authorMatthew Waters <ystreet00@gmail.com>
Sat, 9 Mar 2013 11:53:09 +0000 (22:53 +1100)
committerMatthew Waters <ystreet00@gmail.com>
Sat, 15 Mar 2014 17:36:54 +0000 (18:36 +0100)
gst-libs/gst/gl/win32/gstglwindow_win32.c
gst-libs/gst/gl/win32/gstglwindow_win32.h
gst-libs/gst/gl/win32/gstglwindow_win32_egl.c
gst-libs/gst/gl/win32/gstglwindow_win32_egl.h
gst-libs/gst/gl/win32/gstglwindow_win32_wgl.c
gst-libs/gst/gl/win32/gstglwindow_win32_wgl.h

index 0ecb1d7..35735b9 100644 (file)
@@ -69,6 +69,8 @@ G_DEFINE_TYPE_WITH_CODE (GstGLWindowWin32, gst_gl_window_win32,
 
 HHOOK hHook;
 
+gboolean gst_gl_window_win32_create_context (GstGLWindow * window,
+    GstGLAPI gl_api, guintptr external_gl_context, GError ** error);
 guintptr gst_gl_window_win32_get_gl_context (GstGLWindow * window);
 gboolean gst_gl_window_win32_activate (GstGLWindow * window, gboolean activate);
 void gst_gl_window_win32_set_window_handle (GstGLWindow * window,
@@ -85,37 +87,12 @@ void gst_gl_window_win32_send_message (GstGLWindow * window,
 static void
 gst_gl_window_win32_class_init (GstGLWindowWin32Class * klass)
 {
-  GstGLWindowClass *window_class;
-  WNDCLASS wc;
-  ATOM atom = 0;
-  HINSTANCE hinstance = GetModuleHandle (NULL);
-
-  window_class = (GstGLWindowClass *) klass;
+  GstGLWindowClass *window_class = (GstGLWindowClass *) klass;
 
   g_type_class_add_private (klass, sizeof (GstGLWindowWin32Private));
 
-  atom = GetClassInfo (hinstance, "GSTGL", &wc);
-
-  if (atom == 0) {
-    ZeroMemory (&wc, sizeof (WNDCLASS));
-
-    wc.lpfnWndProc = window_proc;
-    wc.cbClsExtra = 0;
-    wc.cbWndExtra = 0;
-    wc.hInstance = hinstance;
-    wc.hIcon = LoadIcon (NULL, IDI_WINLOGO);
-    wc.style = CS_OWNDC | CS_HREDRAW | CS_VREDRAW;
-    wc.hCursor = LoadCursor (NULL, IDC_ARROW);
-    wc.hbrBackground = (HBRUSH) GetStockObject (BLACK_BRUSH);
-    wc.lpszMenuName = NULL;
-    wc.lpszClassName = "GSTGL";
-
-    atom = RegisterClass (&wc);
-
-    if (atom == 0)
-      GST_WARNING ("Failed to register window class %lud\n", GetLastError ());
-  }
-
+  window_class->create_context =
+      GST_DEBUG_FUNCPTR (gst_gl_window_win32_create_context);
   window_class->get_gl_context =
       GST_DEBUG_FUNCPTR (gst_gl_window_win32_get_gl_context);
   window_class->activate = GST_DEBUG_FUNCPTR (gst_gl_window_win32_activate);
@@ -139,25 +116,20 @@ gst_gl_window_win32_init (GstGLWindowWin32 * window)
 
 /* Must be called in the gl thread */
 GstGLWindowWin32 *
-gst_gl_window_win32_new (GstGLAPI gl_api, guintptr external_gl_context,
-    GError ** error)
+gst_gl_window_win32_new (void)
 {
   GstGLWindowWin32 *window = NULL;
   const gchar *user_choice;
 
   user_choice = g_getenv ("GST_GL_PLATFORM");
 
-#if HAVE_WGL
+#if GST_GL_HAVE_PLATFORM_WGL
   if (!window && (!user_choice || g_strstr_len (user_choice, 3, "wgl")))
-    window =
-        GST_GL_WINDOW_WIN32 (gst_gl_window_win32_wgl_new (gl_api,
-            external_gl_context, error));
+    window = GST_GL_WINDOW_WIN32 (gst_gl_window_win32_wgl_new ());
 #endif
-#if HAVE_EGL
+#if GST_GL_HAVE_PLATFORM_EGL
   if (!window && (!user_choice || g_strstr_len (user_choice, 3, "egl")))
-    window =
-        GST_GL_WINDOW_WIN32 (gst_gl_window_win32_egl_new (gl_api,
-            external_gl_context, error));
+    window = GST_GL_WINDOW_WIN32 (gst_gl_window_win32_egl_new ());
 #endif
   if (!window) {
     GST_WARNING ("Failed to create win32 window, user_choice:%s",
@@ -165,30 +137,61 @@ gst_gl_window_win32_new (GstGLAPI gl_api, guintptr external_gl_context,
     return NULL;
   }
 
-  window->priv->gl_api = gl_api;
-  window->priv->external_gl_context = external_gl_context;
-  window->priv->error = error;
-
   return window;
 }
 
 gboolean
-gst_gl_window_win32_open_device (GstGLWindowWin32 * window_win32,
-    GError ** error)
+gst_gl_window_win32_create_context (GstGLWindow * window, GstGLAPI gl_api,
+    guintptr external_gl_context, GError ** error)
 {
+  GstGLWindowWin32 *window_win32 = GST_GL_WINDOW_WIN32 (window);
+  WNDCLASSEX wc;
+  ATOM atom = 0;
   HINSTANCE hinstance = GetModuleHandle (NULL);
 
   static gint x = 0;
   static gint y = 0;
 
+  GST_LOG ("Attempting to create a win32 window");
+
   x += 20;
   y += 20;
 
+  atom = GetClassInfoEx (hinstance, "GSTGL", &wc);
+
+  if (atom == 0) {
+    ZeroMemory (&wc, sizeof (WNDCLASSEX));
+
+    wc.cbSize = sizeof (WNDCLASSEX);
+    wc.lpfnWndProc = window_proc;
+    wc.cbClsExtra = 0;
+    wc.cbWndExtra = 0;
+    wc.hInstance = hinstance;
+    wc.hIcon = LoadIcon (NULL, IDI_WINLOGO);
+    wc.hIconSm = NULL;
+    wc.style = CS_OWNDC | CS_HREDRAW | CS_VREDRAW;
+    wc.hCursor = LoadCursor (NULL, IDC_ARROW);
+    wc.hbrBackground = (HBRUSH) GetStockObject (BLACK_BRUSH);
+    wc.lpszMenuName = NULL;
+    wc.lpszClassName = "GSTGL";
+
+    atom = RegisterClassEx (&wc);
+
+    if (atom == 0) {
+      GST_WARNING ("Failed to register window class %lud\n", GetLastError ());
+      goto failure;
+    }
+  }
+
   window_win32->internal_win_id = 0;
   window_win32->device = 0;
   window_win32->is_closed = FALSE;
   window_win32->visible = FALSE;
 
+  window_win32->priv->gl_api = gl_api;
+  window_win32->priv->external_gl_context = external_gl_context;
+  window_win32->priv->error = error;
+
   window_win32->internal_win_id = CreateWindowEx (0,
       "GSTGL",
       "OpenGL renderer",
@@ -211,6 +214,7 @@ gst_gl_window_win32_open_device (GstGLWindowWin32 * window_win32,
 
   ShowCursor (TRUE);
 
+  GST_LOG ("Created a win32 window");
   return TRUE;
 
 failure:
index 526b05b..1552481 100644 (file)
@@ -74,9 +74,7 @@ struct _GstGLWindowWin32Class {
 
 GType gst_gl_window_win32_get_type     (void);
 
-GstGLWindowWin32 * gst_gl_window_win32_new          (GstGLAPI gl_api,
-                                                     guintptr external_gl_context, GError ** error);
-gboolean         gst_gl_window_win32_open_device  (GstGLWindowWin32 *window_win32, GError ** error);
+GstGLWindowWin32 * gst_gl_window_win32_new          (void);
 
 G_END_DECLS
 
index 7508b0f..8f046e8 100644 (file)
@@ -80,14 +80,11 @@ gst_gl_window_win32_egl_init (GstGLWindow * window)
 
 /* Must be called in the gl thread */
 GstGLWindowWin32EGL *
-gst_gl_window_win32_egl_new (GstGLAPI gl_api, guintptr external_gl_context,
-    GError ** error)
+gst_gl_window_win32_egl_new (void)
 {
   GstGLWindowWin32EGL *window =
       g_object_new (GST_GL_TYPE_WINDOW_WIN32_EGL, NULL);
 
-  gst_gl_window_win32_open_device (GST_GL_WINDOW_WIN32 (window), error);
-
   return window;
 }
 
index c82c9e0..f3167f4 100644 (file)
@@ -62,8 +62,7 @@ struct _GstGLWindowWin32EGLClass {
 
 GType gst_gl_window_win32_egl_get_type     (void);
 
-GstGLWindowWin32EGL * gst_gl_window_win32_egl_new  (GstGLAPI gl_api,
-                                                    guintptr external_gl_context, GError ** error);
+GstGLWindowWin32EGL * gst_gl_window_win32_egl_new  (void);
 
 G_END_DECLS
 
index 8e7b67e..8fa166b 100644 (file)
@@ -80,14 +80,11 @@ gst_gl_window_win32_wgl_init (GstGLWindowWin32WGL * window)
 
 /* Must be called in the gl thread */
 GstGLWindowWin32WGL *
-gst_gl_window_win32_wgl_new (GstGLAPI gl_api, guintptr external_gl_context,
-    GError ** error)
+gst_gl_window_win32_wgl_new (void)
 {
   GstGLWindowWin32WGL *window =
       g_object_new (GST_GL_TYPE_WINDOW_WIN32_WGL, NULL);
 
-  gst_gl_window_win32_open_device (GST_GL_WINDOW_WIN32 (window), error);
-
   return window;
 }
 
@@ -110,7 +107,8 @@ gst_gl_window_win32_wgl_create_context (GstGLWindowWin32 * window_win32,
   }
   g_assert (window_wgl->wgl_context);
 
-  GST_LOG ("gl context id: %ld", (gulong) window_wgl->wgl_context);
+  GST_LOG ("gl context id: %" G_GUINTPTR_FORMAT,
+      (guintptr) window_wgl->wgl_context);
 
   return TRUE;
 
@@ -127,7 +125,7 @@ gst_gl_window_win32_wgl_destroy_context (GstGLWindowWin32 * window_win32)
 
   if (window_wgl->wgl_context)
     wglDeleteContext (window_wgl->wgl_context);
-  window_wgl->wgl_context = 0;
+  window_wgl->wgl_context = NULL;
 }
 
 static gboolean
index b28a5a1..ac1a108 100644 (file)
@@ -55,8 +55,7 @@ struct _GstGLWindowWin32WGLClass {
 
 GType gst_gl_window_win32_wgl_get_type     (void);
 
-GstGLWindowWin32WGL * gst_gl_window_win32_wgl_new  (GstGLAPI gl_api,
-                                                    guintptr external_gl_context, GError ** error);
+GstGLWindowWin32WGL * gst_gl_window_win32_wgl_new  (void);
 
 G_END_DECLS