static void gdk_x11_gl_context_dispose (GObject *gobject) { GdkWaylandGLContext *context_wayland = GDK_WAYLAND_GL_CONTEXT (gobject); if (context_wayland->egl_context != NULL) { GdkGLContext *context = GDK_GL_CONTEXT (gobject); GdkWindow *window = gdk_gl_context_get_window (context); GdkDisplay *display = gdk_window_get_display (window); GdkWaylandDisplay *display_wayland = GDK_WAYLAND_DISPLAY (display); if (eglGetCurrentContext () == context_wayland->egl_context) eglMakeCurrent(display_wayland->egl_display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); GDK_NOTE (OPENGL, g_print ("Destroying EGL context\n")); eglDestroyContext (display_wayland->egl_display, context_wayland->egl_context); context_wayland->egl_context = NULL; } G_OBJECT_CLASS (gdk_wayland_gl_context_parent_class)->dispose (gobject); }
static int lglext_drawable_gl_begin(lua_State* L) { luaL_checktype(L, 1, LUA_TUSERDATA); luaL_checktype(L, 2, LUA_TUSERDATA); Object* obj1 = lua_touserdata(L, 1); Object* obj2 = lua_touserdata(L, 2); gboolean res = gdk_gl_drawable_gl_begin(GDK_GL_DRAWABLE(obj1->pointer), GDK_GL_CONTEXT(obj2->pointer)); lua_pushboolean(L, res); return 1; }
static void gdk_gl_context_impl_win32_finalize (GObject *object) { GdkGLContextImplWin32 *impl = GDK_GL_CONTEXT_IMPL_WIN32 (object); GDK_GL_NOTE_FUNC_PRIVATE (); _gdk_win32_gl_context_impl_destroy (GDK_GL_CONTEXT (object)); g_object_unref (G_OBJECT (impl->glconfig)); if (impl->share_list != NULL) g_object_unref (G_OBJECT (impl->share_list)); G_OBJECT_CLASS (gdk_gl_context_impl_win32_parent_class)->finalize (object); }
GdkGLContext * gdk_wayland_window_create_gl_context (GdkWindow *window, gboolean attached, GdkGLContext *share, GError **error) { GdkDisplay *display = gdk_window_get_display (window); GdkWaylandDisplay *display_wayland = GDK_WAYLAND_DISPLAY (display); GdkWaylandGLContext *context; EGLConfig config; if (!gdk_wayland_display_init_gl (display)) { g_set_error_literal (error, GDK_GL_ERROR, GDK_GL_ERROR_NOT_AVAILABLE, _("No GL implementation is available")); return NULL; } if (!display_wayland->have_egl_khr_create_context) { g_set_error_literal (error, GDK_GL_ERROR, GDK_GL_ERROR_UNSUPPORTED_PROFILE, _("Core GL is not available on EGL implementation")); return NULL; } if (!find_eglconfig_for_window (window, &config, error)) return NULL; context = g_object_new (GDK_TYPE_WAYLAND_GL_CONTEXT, "display", display, "window", window, "shared-context", share, NULL); context->egl_config = config; context->is_attached = attached; return GDK_GL_CONTEXT (context); }