mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-12-25 13:11:13 +00:00
gdk: Allow querying if a GL context is in legacy mode
We want to have the ability to fall back to legacy GL contexts when creating them. In order to do so, we need to store the legacy bit on the GdkGLContext, as well as being able to query it. Setting the legacy bit from outside GDK is not possible; we cannot create GL contexts in 3.2 core profile *and* compatibility modes at the same time, and if we allowed users to select the legacy mode themselves, it would break the creation of the GdkWindow's paint GL context. What we do allow is falling back to legacy GL context if the platform does not support 3.2 core profiles — for instance, on older GPUs or inside virtualized environments. We are also going to use the legacy bit internally, to choose which GL API we can use when drawing GL content. https://bugzilla.gnome.org/show_bug.cgi?id=756142
This commit is contained in:
parent
b23eabbd64
commit
2dfca143bb
@ -103,6 +103,7 @@ typedef struct {
|
||||
guint extensions_checked : 1;
|
||||
guint debug_enabled : 1;
|
||||
guint forward_compatible : 1;
|
||||
guint is_legacy : 1;
|
||||
|
||||
GdkGLContextPaintData *paint_data;
|
||||
} GdkGLContextPrivate;
|
||||
@ -554,6 +555,38 @@ gdk_gl_context_get_required_version (GdkGLContext *context,
|
||||
*minor = min;
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_gl_context_is_legacy:
|
||||
* @context: a #GdkGLContext
|
||||
*
|
||||
* Whether the #GdkGLContext is in legacy mode or not.
|
||||
*
|
||||
* The #GdkGLContext must be realized.
|
||||
*
|
||||
* Returns: %TRUE if the GL context is in legacy mode
|
||||
*
|
||||
* Since: 3.20
|
||||
*/
|
||||
gboolean
|
||||
gdk_gl_context_is_legacy (GdkGLContext *context)
|
||||
{
|
||||
GdkGLContextPrivate *priv = gdk_gl_context_get_instance_private (context);
|
||||
|
||||
g_return_val_if_fail (GDK_IS_GL_CONTEXT (context), FALSE);
|
||||
g_return_val_if_fail (priv->realized, FALSE);
|
||||
|
||||
return priv->is_legacy;
|
||||
}
|
||||
|
||||
void
|
||||
gdk_gl_context_set_is_legacy (GdkGLContext *context,
|
||||
gboolean is_legacy)
|
||||
{
|
||||
GdkGLContextPrivate *priv = gdk_gl_context_get_instance_private (context);
|
||||
|
||||
priv->is_legacy = !!is_legacy;
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_gl_context_realize:
|
||||
* @context: a #GdkGLContext
|
||||
|
@ -52,6 +52,8 @@ GDK_AVAILABLE_IN_3_16
|
||||
void gdk_gl_context_get_version (GdkGLContext *context,
|
||||
int *major,
|
||||
int *minor);
|
||||
GDK_AVAILABLE_IN_3_20
|
||||
gboolean gdk_gl_context_is_legacy (GdkGLContext *context);
|
||||
|
||||
GDK_AVAILABLE_IN_3_16
|
||||
void gdk_gl_context_set_required_version (GdkGLContext *context,
|
||||
|
@ -69,6 +69,9 @@ typedef struct {
|
||||
GdkGLContextProgram *current_program;
|
||||
} GdkGLContextPaintData;
|
||||
|
||||
void gdk_gl_context_set_is_legacy (GdkGLContext *context,
|
||||
gboolean is_legacy);
|
||||
|
||||
void gdk_gl_context_upload_texture (GdkGLContext *context,
|
||||
cairo_surface_t *image_surface,
|
||||
int width,
|
||||
|
Loading…
Reference in New Issue
Block a user