glarea: Relay the use-es flag to context creation

https://bugzilla.gnome.org/show_bug.cgi?id=743746
This commit is contained in:
Emanuele Aina 2016-04-18 16:15:27 +02:00 committed by Emmanuele Bassi
parent 872b5115ea
commit 971998de34
2 changed files with 87 additions and 0 deletions

View File

@ -157,6 +157,7 @@ typedef struct {
gboolean needs_resize;
gboolean needs_render;
gboolean auto_render;
gboolean use_es;
} GtkGLAreaPrivate;
enum {
@ -166,6 +167,7 @@ enum {
PROP_HAS_ALPHA,
PROP_HAS_DEPTH_BUFFER,
PROP_HAS_STENCIL_BUFFER,
PROP_USE_ES,
PROP_AUTO_RENDER,
@ -225,6 +227,10 @@ gtk_gl_area_set_property (GObject *gobject,
gtk_gl_area_set_has_stencil_buffer (self, g_value_get_boolean (value));
break;
case PROP_USE_ES:
gtk_gl_area_set_use_es (self, g_value_get_boolean (value));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
}
@ -260,6 +266,10 @@ gtk_gl_area_get_property (GObject *gobject,
g_value_set_object (value, priv->context);
break;
case PROP_USE_ES:
g_value_set_boolean (value, priv->use_es);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
}
@ -338,6 +348,7 @@ gtk_gl_area_real_create_context (GtkGLArea *area)
return NULL;
}
gdk_gl_context_set_use_es (context, priv->use_es);
gdk_gl_context_set_required_version (context,
priv->required_gl_version / 10,
priv->required_gl_version % 10);
@ -850,6 +861,25 @@ gtk_gl_area_class_init (GtkGLAreaClass *klass)
G_PARAM_STATIC_STRINGS |
G_PARAM_EXPLICIT_NOTIFY);
/**
* GtkGLArea:use-es:
*
* If set to %TRUE the widget will try to create a #GdkGLContext using
* OpenGL ES instead of OpenGL.
*
* See also: gdk_gl_context_set_use_es()
*
* Since: 3.22
*/
obj_props[PROP_USE_ES] =
g_param_spec_boolean ("use-es",
P_("Use OpenGL ES"),
P_("Whether the context uses OpenGL or OpenGL ES"),
FALSE,
GTK_PARAM_READWRITE |
G_PARAM_STATIC_STRINGS |
G_PARAM_EXPLICIT_NOTIFY);
gobject_class->set_property = gtk_gl_area_set_property;
gobject_class->get_property = gtk_gl_area_get_property;
gobject_class->dispose = gtk_gl_area_dispose;
@ -1012,6 +1042,58 @@ gtk_gl_area_get_error (GtkGLArea *area)
return priv->error;
}
/**
* gtk_gl_area_set_use_es:
* @area: a #GtkGLArea
* @use_es: whether to use OpenGL or OpenGL ES
*
* Sets whether the @area should create an OpenGL or an OpenGL ES context.
*
* You should check the capabilities of the #GdkGLContext before drawing
* with either API.
*
* Since: 3.22
*/
void
gtk_gl_area_set_use_es (GtkGLArea *area,
gboolean use_es)
{
GtkGLAreaPrivate *priv = gtk_gl_area_get_instance_private (area);
g_return_if_fail (GTK_IS_GL_AREA (area));
g_return_if_fail (!gtk_widget_get_realized (GTK_WIDGET (area)));
use_es = !!use_es;
if (priv->use_es != use_es)
{
priv->use_es = use_es;
g_object_notify_by_pspec (G_OBJECT (area), obj_props[PROP_USE_ES]);
}
}
/**
* gtk_gl_area_get_use_es:
* @area: a #GtkGLArea
*
* Retrieves the value set by gtk_gl_area_set_use_es().
*
* Returns: %TRUE if the #GtkGLArea should create an OpenGL ES context
* and %FALSE otherwise
*
* Since: 3.22
*/
gboolean
gtk_gl_area_get_use_es (GtkGLArea *area)
{
GtkGLAreaPrivate *priv = gtk_gl_area_get_instance_private (area);
g_return_val_if_fail (GTK_IS_GL_AREA (area), FALSE);
return priv->use_es;
}
/**
* gtk_gl_area_set_required_version:
* @area: a #GtkGLArea

View File

@ -85,6 +85,11 @@ GType gtk_gl_area_get_type (void) G_GNUC_CONST;
GDK_AVAILABLE_IN_3_16
GtkWidget * gtk_gl_area_new (void);
GDK_AVAILABLE_IN_3_22
void gtk_gl_area_set_use_es (GtkGLArea *area,
gboolean use_es);
GDK_AVAILABLE_IN_3_22
gboolean gtk_gl_area_get_use_es (GtkGLArea *area);
GDK_AVAILABLE_IN_3_16
void gtk_gl_area_set_required_version (GtkGLArea *area,
gint major,