diff options
author | Matthias Clasen <mclasen@redhat.com> | 2021-08-18 12:19:57 +0000 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2021-08-18 12:19:57 +0000 |
commit | 5707b80a6997a4c5028cd8e4535a0475163a7430 (patch) | |
tree | 855e1f1513bb186ac04eb3b598313129014e8828 | |
parent | 81e5d4c327f0898fc1701a3ec592247383159c6e (diff) | |
parent | 5d0f188615ad34186da974b251bb18f5974e70ec (diff) | |
download | gtk+-5707b80a6997a4c5028cd8e4535a0475163a7430.tar.gz |
Merge branch 'win32-check-shader-support' into 'master'
GDK-Win32: Reject GL context if shaders aren't supported (fix issue #4165)
Closes #4165
See merge request GNOME/gtk!3850
-rw-r--r-- | gdk/win32/gdkglcontext-win32-egl.c | 2 | ||||
-rw-r--r-- | gdk/win32/gdkglcontext-win32-wgl.c | 19 |
2 files changed, 20 insertions, 1 deletions
diff --git a/gdk/win32/gdkglcontext-win32-egl.c b/gdk/win32/gdkglcontext-win32-egl.c index 9d2df6b499..cfc4417a9a 100644 --- a/gdk/win32/gdkglcontext-win32-egl.c +++ b/gdk/win32/gdkglcontext-win32-egl.c @@ -277,7 +277,7 @@ gdk_win32_display_init_egl (GdkDisplay *display, display_win32->egl_disp = egl_disp; display_win32->egl_version = epoxy_egl_version (egl_disp); - eglBindAPI(EGL_OPENGL_ES_API); + eglBindAPI (EGL_OPENGL_ES_API); display_win32->hasEglSurfacelessContext = epoxy_has_egl_extension (egl_disp, "EGL_KHR_surfaceless_context"); diff --git a/gdk/win32/gdkglcontext-win32-wgl.c b/gdk/win32/gdkglcontext-win32-wgl.c index 4b000f4792..3d05fb8907 100644 --- a/gdk/win32/gdkglcontext-win32-wgl.c +++ b/gdk/win32/gdkglcontext-win32-wgl.c @@ -278,6 +278,9 @@ gdk_win32_display_init_wgl (GdkDisplay *display, if (best_idx == 0 || !wglMakeCurrent (hdc, display_win32->dummy_context_wgl.hglrc)) { + if (display_win32->dummy_context_wgl.hglrc != NULL) + wglDeleteContext (display_win32->dummy_context_wgl.hglrc); + g_set_error_literal (error, GDK_GL_ERROR, GDK_GL_ERROR_NOT_AVAILABLE, _("No GL implementation is available")); @@ -288,6 +291,22 @@ gdk_win32_display_init_wgl (GdkDisplay *display, display_win32->wgl_pixel_format = best_idx; display_win32->gl_version = epoxy_gl_version (); + /* We must have OpenGL/WGL 2.0 or later, or have the GL_ARB_shader_objects extension */ + if (display_win32->gl_version < 20) + { + if (!epoxy_has_gl_extension ("GL_ARB_shader_objects")) + { + wglMakeCurrent (NULL, NULL); + wglDeleteContext (display_win32->dummy_context_wgl.hglrc); + + g_set_error_literal (error, GDK_GL_ERROR, + GDK_GL_ERROR_NOT_AVAILABLE, + _("No GL implementation is available")); + + return FALSE; + } + } + display_win32->hasWglARBCreateContext = epoxy_has_wgl_extension (hdc, "WGL_ARB_create_context"); display_win32->hasWglEXTSwapControl = |