summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2021-08-18 12:19:57 +0000
committerMatthias Clasen <mclasen@redhat.com>2021-08-18 12:19:57 +0000
commit5707b80a6997a4c5028cd8e4535a0475163a7430 (patch)
tree855e1f1513bb186ac04eb3b598313129014e8828
parent81e5d4c327f0898fc1701a3ec592247383159c6e (diff)
parent5d0f188615ad34186da974b251bb18f5974e70ec (diff)
downloadgtk+-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.c2
-rw-r--r--gdk/win32/gdkglcontext-win32-wgl.c19
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 =