static gboolean _gdk_win32_gl_context_impl_make_current (GdkGLContext *glcontext, GdkGLDrawable *draw, GdkGLDrawable *read) { GdkGLWindowImplWin32 *impl; HDC hdc; HGLRC hglrc; g_return_val_if_fail (GDK_IS_WIN32_GL_CONTEXT (glcontext), FALSE); g_return_val_if_fail (GDK_IS_WIN32_GL_WINDOW (draw), FALSE); if (GDK_GL_WINDOW_IS_DESTROYED (GDK_GL_WINDOW (draw)) || GDK_GL_CONTEXT_IS_DESTROYED (glcontext)) return FALSE; impl = GDK_GL_WINDOW_IMPL_WIN32 (GDK_GL_WINDOW (draw)->impl); /* Get DC. */ hdc = GDK_GL_WINDOW_IMPL_WIN32_HDC_GET (impl); /* Get GLRC. */ hglrc = GDK_GL_CONTEXT_HGLRC (glcontext); GDK_GL_NOTE_FUNC_IMPL ("wglMakeCurrent"); if (!wglMakeCurrent (hdc, hglrc)) { g_warning ("wglMakeCurrent() failed"); _gdk_gl_context_set_gl_drawable (glcontext, NULL); /* currently unused. */ /* _gdk_gl_context_set_gl_drawable_read (glcontext, NULL); */ return FALSE; } _gdk_gl_context_set_gl_drawable (glcontext, draw); /* currently unused. */ /* _gdk_gl_context_set_gl_drawable_read (glcontext, read); */ if (_GDK_GL_CONFIG_AS_SINGLE_MODE (impl->glconfig)) { /* We do this because we are treating a double-buffered frame buffer as a single-buffered frame buffer because the system does not appear to export any suitable single-buffered visuals (in which the following are necessary). */ glDrawBuffer (GL_FRONT); glReadBuffer (GL_FRONT); } GDK_GL_NOTE (MISC, _gdk_gl_print_gl_info ()); /* * Do *NOT* release DC. * * With some graphics card, DC owned by rendering thread will be needed. */ return TRUE; }
static gboolean gdk_gl_pixmap_impl_win32_make_context_current (GdkGLDrawable *draw, GdkGLDrawable *read, GdkGLContext *glcontext) { GdkGLPixmapImplWin32 *impl; HDC hdc; HGLRC hglrc; g_return_val_if_fail (GDK_IS_GL_PIXMAP_IMPL_WIN32 (draw), FALSE); g_return_val_if_fail (GDK_IS_GL_CONTEXT_IMPL_WIN32 (glcontext), FALSE); if (GDK_GL_PIXMAP_IS_DESTROYED (draw) || GDK_GL_CONTEXT_IS_DESTROYED (glcontext)) return FALSE; impl = GDK_GL_PIXMAP_IMPL_WIN32 (draw); /* Get DC. */ hdc = GDK_GL_PIXMAP_IMPL_WIN32_HDC_GET (impl); /* Get GLRC. */ hglrc = GDK_GL_CONTEXT_HGLRC (glcontext); GDK_GL_NOTE_FUNC_IMPL ("wglMakeCurrent"); if (!wglMakeCurrent (hdc, hglrc)) { _gdk_gl_context_set_gl_drawable (glcontext, NULL); /* currently unused. */ /* _gdk_gl_context_set_gl_drawable_read (glcontext, NULL); */ return FALSE; } _gdk_gl_context_set_gl_drawable (glcontext, draw); /* currently unused. */ /* _gdk_gl_context_set_gl_drawable_read (glcontext, read); */ if (_GDK_GL_CONFIG_AS_SINGLE_MODE (impl->glconfig)) { /* We do this because we are treating a double-buffered frame buffer as a single-buffered frame buffer because the system does not appear to export any suitable single-buffered visuals (in which the following are necessary). */ glDrawBuffer (GL_FRONT); glReadBuffer (GL_FRONT); } GDK_GL_NOTE (MISC, _gdk_gl_print_gl_info ()); /* Do *NOT* release DC. */ return TRUE; }