diff options
author | Benjamin Otte <otte@redhat.com> | 2023-04-26 06:16:37 +0200 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2023-04-27 02:16:46 +0200 |
commit | d6afcee1e4fd48fdeb6ccec63ac2287091c863d7 (patch) | |
tree | 0b193ccf3e8a2a39b464af264dbe40f6810e9009 /gdk | |
parent | c71ca481c1279783de1a28733bec6b54af0f6f65 (diff) | |
download | gtk+-d6afcee1e4fd48fdeb6ccec63ac2287091c863d7.tar.gz |
wgl: Create context during WGL initialization
This way, we can realize it and either print success information about
it or return NULL if that fails.
This makes it more likely that we fail early, which means we can then
initialize EGL.
Diffstat (limited to 'gdk')
-rw-r--r-- | gdk/win32/gdkdisplay-win32.c | 10 | ||||
-rw-r--r-- | gdk/win32/gdkglcontext-win32-wgl.c | 57 | ||||
-rw-r--r-- | gdk/win32/gdkglcontext-win32.h | 8 |
3 files changed, 42 insertions, 33 deletions
diff --git a/gdk/win32/gdkdisplay-win32.c b/gdk/win32/gdkdisplay-win32.c index bad1076866..7952089f52 100644 --- a/gdk/win32/gdkdisplay-win32.c +++ b/gdk/win32/gdkdisplay-win32.c @@ -1182,6 +1182,7 @@ gdk_win32_display_init_gl (GdkDisplay *display, { GdkWin32Display *display_win32 = GDK_WIN32_DISPLAY (display); HDC init_gl_hdc = NULL; + GdkGLContext *context; if (display_win32->dummy_context_wgl.hdc == NULL) display_win32->dummy_context_wgl.hdc = GetDC (display_win32->hwnd); @@ -1216,12 +1217,9 @@ gdk_win32_display_init_gl (GdkDisplay *display, } #endif - if (gdk_win32_display_init_wgl (display, error)) - { - return g_object_new (GDK_TYPE_WIN32_GL_CONTEXT_WGL, - "display", display, - NULL); - } + context = gdk_win32_display_init_wgl (display, error); + if (context) + return context; #ifdef HAVE_EGL g_clear_error (error); diff --git a/gdk/win32/gdkglcontext-win32-wgl.c b/gdk/win32/gdkglcontext-win32-wgl.c index 31dedf4922..b4b80dd065 100644 --- a/gdk/win32/gdkglcontext-win32-wgl.c +++ b/gdk/win32/gdkglcontext-win32-wgl.c @@ -247,17 +247,17 @@ gdk_init_dummy_wgl_context (GdkWin32Display *display_win32) return best_idx; } -gboolean +GdkGLContext * gdk_win32_display_init_wgl (GdkDisplay *display, GError **error) { int best_idx = 0; GdkWin32Display *display_win32 = GDK_WIN32_DISPLAY (display); - GdkGLVersion gl_version; + GdkGLContext *context; HDC hdc; if (!gdk_gl_backend_can_be_used (GDK_GL_WGL, error)) - return FALSE; + return NULL; /* acquire and cache dummy Window (HWND & HDC) and * dummy GL Context, it is used to query functions @@ -276,7 +276,7 @@ gdk_win32_display_init_wgl (GdkDisplay *display, GDK_GL_ERROR_NOT_AVAILABLE, _("No GL implementation is available")); - return FALSE; + return NULL; } display_win32->hasWglARBCreateContext = @@ -290,29 +290,40 @@ gdk_win32_display_init_wgl (GdkDisplay *display, display_win32->hasWglARBmultisample = epoxy_has_wgl_extension (hdc, "WGL_ARB_multisample"); - gdk_gl_version_init_epoxy (&gl_version); + context = g_object_new (GDK_TYPE_WIN32_GL_CONTEXT_WGL, + "display", display, + NULL); + if (!gdk_gl_context_realize (context, error)) + { + g_object_unref (context); + return NULL; + } - GDK_NOTE (OPENGL, - g_print ("WGL API version %d.%d found\n" - " - Vendor: %s\n" - " - Checked extensions:\n" - "\t* WGL_ARB_pixel_format: %s\n" - "\t* WGL_ARB_create_context: %s\n" - "\t* WGL_EXT_swap_control: %s\n" - "\t* WGL_OML_sync_control: %s\n" - "\t* WGL_ARB_multisample: %s\n", - gdk_gl_version_get_major (&gl_version), - gdk_gl_version_get_minor (&gl_version), - glGetString (GL_VENDOR), - display_win32->hasWglARBPixelFormat ? "yes" : "no", - display_win32->hasWglARBCreateContext ? "yes" : "no", - display_win32->hasWglEXTSwapControl ? "yes" : "no", - display_win32->hasWglOMLSyncControl ? "yes" : "no", - display_win32->hasWglARBmultisample ? "yes" : "no")); +#if G_ENABLE_DEBUG + { + int major, minor; + gdk_gl_context_get_version (context, &major, &minor); + GDK_NOTE (OPENGL, g_print ("WGL API version %d.%d found\n" + " - Vendor: %s\n" + " - Checked extensions:\n" + "\t* WGL_ARB_pixel_format: %s\n" + "\t* WGL_ARB_create_context: %s\n" + "\t* WGL_EXT_swap_control: %s\n" + "\t* WGL_OML_sync_control: %s\n" + "\t* WGL_ARB_multisample: %s\n", + major, minor, + glGetString (GL_VENDOR), + display_win32->hasWglARBPixelFormat ? "yes" : "no", + display_win32->hasWglARBCreateContext ? "yes" : "no", + display_win32->hasWglEXTSwapControl ? "yes" : "no", + display_win32->hasWglOMLSyncControl ? "yes" : "no", + display_win32->hasWglARBmultisample ? "yes" : "no")); + } +#endif wglMakeCurrent (NULL, NULL); - return TRUE; + return context; } /* Setup the legacy context after creating it */ diff --git a/gdk/win32/gdkglcontext-win32.h b/gdk/win32/gdkglcontext-win32.h index 8311f47768..c3c8c1a8d5 100644 --- a/gdk/win32/gdkglcontext-win32.h +++ b/gdk/win32/gdkglcontext-win32.h @@ -64,10 +64,10 @@ struct _GdkWin32GLContextClass typedef struct _GdkWin32GLContextWGL GdkWin32GLContextWGL; -gboolean gdk_win32_display_init_wgl (GdkDisplay *display, - GError **error); -void gdk_win32_gl_context_wgl_bind_surface (GdkWin32GLContextWGL *ctx, - GdkWin32Surface *win32_surface); +GdkGLContext * gdk_win32_display_init_wgl (GdkDisplay *display, + GError **error); +void gdk_win32_gl_context_wgl_bind_surface (GdkWin32GLContextWGL *ctx, + GdkWin32Surface *win32_surface); GType gdk_win32_gl_context_wgl_get_type (void) G_GNUC_CONST; |