summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChun-wei Fan <fanchunwei@src.gnome.org>2021-07-28 11:19:17 +0800
committerChun-wei Fan <fanchunwei@src.gnome.org>2021-07-28 11:28:17 +0800
commit15817973d74dfbdabdd3ba00c9624515f5f04e14 (patch)
tree98c5408ed655359ba6233edda46ad371d7a00d3e
parent998f4f32cccc7ebe3699be74fb066e1d20f472cf (diff)
downloadgtk+-15817973d74dfbdabdd3ba00c9624515f5f04e14.tar.gz
GDK/Win32: Fix up OpenGL a bit
Like the recent updates in GTK4, the HWND that we use to obtain the HDC that we need for OpenGL/GLES operations should really be tied to GdkWindow, not GdkDisplay, as that is where the Win32 HWND where we originate from is located, so stop storing the GL HWND in GdkWin32Display, but just grab them from the GdkWindow that is bound to the GdkGLContext. We are more conservative about freeing up GL resources in GTK3, so we will continue to call ReleaseDC() as we did before.
-rw-r--r--gdk/win32/gdkdisplay-win32.h1
-rw-r--r--gdk/win32/gdkglcontext-win32.c7
-rw-r--r--gdk/win32/gdkwindow-win32.c9
3 files changed, 9 insertions, 8 deletions
diff --git a/gdk/win32/gdkdisplay-win32.h b/gdk/win32/gdkdisplay-win32.h
index f33b76bf34..67201582ed 100644
--- a/gdk/win32/gdkdisplay-win32.h
+++ b/gdk/win32/gdkdisplay-win32.h
@@ -84,7 +84,6 @@ struct _GdkWin32Display
/* WGL/OpenGL Items */
guint have_wgl : 1;
guint gl_version;
- HWND gl_hwnd;
#ifdef GDK_WIN32_ENABLE_EGL
/* EGL (Angle) Items */
diff --git a/gdk/win32/gdkglcontext-win32.c b/gdk/win32/gdkglcontext-win32.c
index e1683511e1..24d2b6facd 100644
--- a/gdk/win32/gdkglcontext-win32.c
+++ b/gdk/win32/gdkglcontext-win32.c
@@ -66,7 +66,7 @@ _gdk_win32_gl_context_dispose (GObject *gobject)
wglDeleteContext (context_win32->hglrc);
context_win32->hglrc = NULL;
- ReleaseDC (display_win32->gl_hwnd, context_win32->gl_hdc);
+ ReleaseDC (GDK_WINDOW_HWND (window), context_win32->gl_hdc);
}
#ifdef GDK_WIN32_ENABLE_EGL
@@ -84,7 +84,7 @@ _gdk_win32_gl_context_dispose (GObject *gobject)
impl = GDK_WINDOW_IMPL_WIN32 (window->impl);
- ReleaseDC (display_win32->gl_hwnd, context_win32->gl_hdc);
+ ReleaseDC (GDK_WINDOW_HWND (window), context_win32->gl_hdc);
}
#endif
@@ -1192,8 +1192,7 @@ _gdk_win32_window_create_gl_context (GdkWindow *window,
EGLConfig config;
#endif
- display_win32->gl_hwnd = GDK_WINDOW_HWND (window);
- hdc = GetDC (display_win32->gl_hwnd);
+ hdc = GetDC (GDK_WINDOW_HWND (window));
#ifdef GDK_WIN32_ENABLE_EGL
/* display_win32->hdc_egl_temp should *not* be destroyed here! It is destroyed at dispose()! */
diff --git a/gdk/win32/gdkwindow-win32.c b/gdk/win32/gdkwindow-win32.c
index 2bccf59736..2d0faaca3e 100644
--- a/gdk/win32/gdkwindow-win32.c
+++ b/gdk/win32/gdkwindow-win32.c
@@ -6304,8 +6304,8 @@ gdk_win32_window_get_handle (GdkWindow *window)
#ifdef GDK_WIN32_ENABLE_EGL
EGLSurface
_gdk_win32_window_get_egl_surface (GdkWindow *window,
- EGLConfig config,
- gboolean is_dummy)
+ EGLConfig config,
+ gboolean is_dummy)
{
EGLSurface surface;
GdkWin32Display *display = GDK_WIN32_DISPLAY (gdk_window_get_display (window));
@@ -6325,7 +6325,10 @@ _gdk_win32_window_get_egl_surface (GdkWindow *window,
else
{
if (impl->egl_surface == EGL_NO_SURFACE)
- impl->egl_surface = eglCreateWindowSurface (display->egl_disp, config, display->gl_hwnd, NULL);
+ impl->egl_surface = eglCreateWindowSurface (display->egl_disp,
+ config,
+ GDK_WINDOW_HWND (window),
+ NULL);
return impl->egl_surface;
}