priv->use_es = -1;
}
+/* Must have called gdk_display_prepare_gl() before */
+GdkGLContext *
+gdk_gl_context_new_for_surface (GdkSurface *surface)
+{
+ GdkDisplay *display = gdk_surface_get_display (surface);
+ GdkGLContext *shared = gdk_display_get_gl_context (display);
+
+ /* assert gdk_display_prepare_gl() had been called */
+ g_assert (shared);
+
+ return g_object_new (G_OBJECT_TYPE (shared),
+ "surface", surface,
+ NULL);
+}
+
GdkGLContextPaintData *
gdk_gl_context_get_paint_data (GdkGLContext *context)
{
guint use_es : 1;
} GdkGLContextPaintData;
+GdkGLContext * gdk_gl_context_new_for_surface (GdkSurface *surface);
+
void gdk_gl_context_set_is_legacy (GdkGLContext *context,
gboolean is_legacy);
gdk_surface_get_paint_gl_context (GdkSurface *surface,
GError **error)
{
- GError *internal_error = NULL;
-
if (!gdk_display_prepare_gl (surface->display, error))
return NULL;
if (surface->gl_paint_context == NULL)
{
- GdkSurfaceClass *class = GDK_SURFACE_GET_CLASS (surface);
-
- surface->gl_paint_context =
- class->create_gl_context (surface, &internal_error);
- }
-
- if (internal_error != NULL)
- {
- g_propagate_error (error, internal_error);
- g_clear_object (&(surface->gl_paint_context));
- return NULL;
+ surface->gl_paint_context = gdk_surface_create_gl_context (surface, error);
+ if (surface->gl_paint_context == NULL)
+ return NULL;
}
- gdk_gl_context_realize (surface->gl_paint_context, &internal_error);
- if (internal_error != NULL)
+ if (!gdk_gl_context_realize (surface->gl_paint_context, error))
{
- g_propagate_error (error, internal_error);
- g_clear_object (&(surface->gl_paint_context));
+ g_clear_object (&surface->gl_paint_context);
return NULL;
}
if (!gdk_display_prepare_gl (surface->display, error))
return NULL;
- return GDK_SURFACE_GET_CLASS (surface)->create_gl_context (surface,
- error);
+ return gdk_gl_context_new_for_surface (surface);
}
/**
void (* set_opaque_region) (GdkSurface *surface,
cairo_region_t *region);
- GdkGLContext *(*create_gl_context) (GdkSurface *surface,
- GError **error);
void (* request_layout) (GdkSurface *surface);
gboolean (* compute_size) (GdkSurface *surface);
};
gdk_macos_display_init_gl (GdkDisplay *display,
GError **error)
{
- return _gdk_macos_gl_context_new (display, NULL, FALSE, NULL, error);
+ return g_object_new (GDK_TYPE_MACOS_GL_CONTEXT,
+ "display", display,
+ NULL);
}
static void
GdkGLContextClass parent_class;
};
-GdkGLContext *_gdk_macos_gl_context_new (GdkMacosDisplay *display,
- GdkMacosSurface *surface,
- gboolean attached,
- GdkGLContext *share,
- GError **error);
G_END_DECLS
{
}
-GdkGLContext *
-_gdk_macos_gl_context_new (GdkMacosDisplay *display,
- GdkMacosSurface *surface,
- gboolean attached,
- GdkGLContext *share,
- GError **error)
-{
- GdkMacosGLContext *context;
-
- g_return_val_if_fail (GDK_IS_MACOS_SURFACE (surface), NULL);
- g_return_val_if_fail (!share || GDK_IS_MACOS_GL_CONTEXT (share), NULL);
-
- context = g_object_new (GDK_TYPE_MACOS_GL_CONTEXT,
- "display", display,
- "surface", surface,
- "shared-context", share,
- NULL);
-
- context->is_attached = !!attached;
-
- return GDK_GL_CONTEXT (context);
-}
-
G_GNUC_END_IGNORE_DEPRECATIONS
return GDK_DRAG (g_steal_pointer (&drag));
}
-static GdkGLContext *
-gdk_macos_surface_create_gl_context (GdkSurface *surface,
- gboolean attached,
- GdkGLContext *share,
- GError **error)
-{
- GdkMacosSurface *self = (GdkMacosSurface *)surface;
-
- g_assert (GDK_IS_MACOS_SURFACE (self));
- g_assert (!share || GDK_IS_GL_CONTEXT (share));
-
- return _gdk_macos_gl_context_new ((GdkMacosDisplay *) gdk_surface_get_display (surface),
- self, attached, share, error);
-}
-
static void
gdk_macos_surface_destroy (GdkSurface *surface,
gboolean foreign_destroy)
object_class->get_property = gdk_macos_surface_get_property;
object_class->set_property = gdk_macos_surface_set_property;
- surface_class->create_gl_context = gdk_macos_surface_create_gl_context;
surface_class->destroy = gdk_macos_surface_destroy;
surface_class->drag_begin = gdk_macos_surface_drag_begin;
surface_class->get_device_state = gdk_macos_surface_get_device_state;
NULL);
}
-GdkGLContext *
-gdk_wayland_surface_create_gl_context (GdkSurface *surface,
- GError **error)
-{
- GdkWaylandGLContext *context;
-
- context = g_object_new (GDK_TYPE_WAYLAND_GL_CONTEXT,
- "surface", surface,
- NULL);
-
- return GDK_GL_CONTEXT (context);
-}
-
static void
gdk_wayland_gl_context_dispose (GObject *gobject)
{
GdkGLContext * gdk_wayland_display_init_gl (GdkDisplay *display,
GError **error);
-GdkGLContext * gdk_wayland_surface_create_gl_context (GdkSurface *surface,
- GError **error);
G_END_DECLS
impl_class->drag_begin = _gdk_wayland_surface_drag_begin;
impl_class->get_scale_factor = gdk_wayland_surface_get_scale_factor;
impl_class->set_opaque_region = gdk_wayland_surface_set_opaque_region;
- impl_class->create_gl_context = gdk_wayland_surface_create_gl_context;
impl_class->request_layout = gdk_wayland_surface_request_layout;
impl_class->compute_size = gdk_wayland_surface_compute_size;
}
{
}
+#if 0
GdkGLContext *
_gdk_win32_surface_create_gl_context (GdkSurface *surface,
GError **error)
return GDK_GL_CONTEXT (context);
}
+#endif
/**
* gdk_win32_display_get_wgl_version:
GdkGLContextClass parent_class;
};
-GdkGLContext *
-_gdk_win32_surface_create_gl_context (GdkSurface *window,
- GError **error);
-
void
_gdk_win32_surface_invalidate_egl_framebuffer (GdkSurface *surface);
impl_class->destroy_notify = gdk_win32_surface_destroy_notify;
impl_class->drag_begin = _gdk_win32_surface_drag_begin;
- impl_class->create_gl_context = _gdk_win32_surface_create_gl_context;
impl_class->get_scale_factor = _gdk_win32_surface_get_scale_factor;
impl_class->request_layout = _gdk_win32_surface_request_layout;
impl_class->compute_size = _gdk_win32_surface_compute_size;
if (!have_gl)
return NULL;
- return gdk_x11_surface_create_gl_context (display_x11->leader_gdk_surface, error);
+ if (display_x11->egl_display)
+ return g_object_new (GDK_TYPE_X11_GL_CONTEXT_EGL, "surface", display_x11->leader_gdk_surface, NULL);
+ else if (display_x11->glx_config != NULL)
+ return g_object_new (GDK_TYPE_X11_GL_CONTEXT_GLX, "surface", display_x11->leader_gdk_surface, NULL);
+ else
+ g_return_val_if_reached (NULL);
}
static void
return TRUE;
}
-GdkX11GLContext *
-gdk_x11_gl_context_egl_new (GdkSurface *surface,
- GError **error)
-{
- GdkX11GLContextEGL *context;
-
- context = g_object_new (GDK_TYPE_X11_GL_CONTEXT_EGL,
- "surface", surface,
- NULL);
-
- return GDK_X11_GL_CONTEXT (context);
-}
-
/**
* gdk_x11_display_get_egl_version:
* @display: (type GdkX11Display): a `GdkDisplay`
#undef MAX_GLX_ATTRS
-GdkX11GLContext *
-gdk_x11_gl_context_glx_new (GdkSurface *surface,
- GError **error)
-{
- GdkX11GLContextGLX *context;
-
- return g_object_new (GDK_TYPE_X11_GL_CONTEXT_GLX,
- "surface", surface,
- NULL);
-
- return GDK_X11_GL_CONTEXT (context);
-}
-
/**
* gdk_x11_display_get_glx_version:
* @display: (type GdkX11Display): a `GdkDisplay`
self->do_frame_sync = TRUE;
}
-GdkGLContext *
-gdk_x11_surface_create_gl_context (GdkSurface *surface,
- GError **error)
-{
- GdkX11GLContext *context = NULL;
- GdkX11Display *display_x11;
- GdkDisplay *display;
-
- display = gdk_surface_get_display (surface);
- display_x11 = GDK_X11_DISPLAY (display);
-
- if (display_x11->egl_display)
- context = gdk_x11_gl_context_egl_new (surface, error);
- else if (display_x11->glx_config != NULL)
- context = gdk_x11_gl_context_glx_new (surface, error);
- else
- {
- g_assert (display_x11->gl_error);
- if (error)
- *error = g_error_copy (display_x11->gl_error);
- return NULL;
- }
-
- if (context == NULL)
- return NULL;
-
- return GDK_GL_CONTEXT (context);
-}
-
gboolean
gdk_x11_display_init_gl_backend (GdkX11Display *self,
Visual **out_visual,
int *out_depth,
GError **error);
-GdkGLContext * gdk_x11_surface_create_gl_context (GdkSurface *window,
- GError **error);
-
/* GLX */
#define GDK_TYPE_X11_GL_CONTEXT_GLX (gdk_x11_gl_context_glx_get_type())
#define GDK_X11_GL_CONTEXT_GLX(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GDK_TYPE_X11_GL_CONTEXT_GLX, GdkX11GLContextGLX))
void gdk_x11_surface_destroy_glx_drawable (GdkX11Surface *self);
GType gdk_x11_gl_context_glx_get_type (void) G_GNUC_CONST;
-GdkX11GLContext * gdk_x11_gl_context_glx_new (GdkSurface *surface,
- GError **error);
/* EGL */
void gdk_x11_surface_destroy_egl_surface (GdkX11Surface *self);
GType gdk_x11_gl_context_egl_get_type (void) G_GNUC_CONST;
-GdkX11GLContext * gdk_x11_gl_context_egl_new (GdkSurface *surface,
- GError **error);
G_END_DECLS
impl_class->drag_begin = _gdk_x11_surface_drag_begin;
impl_class->get_scale_factor = gdk_x11_surface_get_scale_factor;
impl_class->set_opaque_region = gdk_x11_surface_set_opaque_region;
- impl_class->create_gl_context = gdk_x11_surface_create_gl_context;
impl_class->request_layout = gdk_x11_surface_request_layout;
impl_class->compute_size = gdk_x11_surface_compute_size;
}