typedef struct {
GdkGLVersion required;
- int gl_version;
+ GdkGLVersion gl_version;
guint has_khr_debug : 1;
guint use_khr_debug : 1;
glViewport (0, 0, ww, wh);
#ifdef HAVE_EGL
- if (priv->egl_context && gdk_gl_context_check_version (context, 0, 0, 3, 0))
+ if (priv->egl_context && gdk_gl_context_check_version (context, NULL, "3.0"))
glDrawBuffers (1, (GLenum[1]) { gdk_gl_context_get_use_es (context) ? GL_BACK : GL_BACK_LEFT });
#endif
}
}
gboolean
-gdk_gl_context_check_version (GdkGLContext *self,
- int required_gl_major,
- int required_gl_minor,
- int required_gles_major,
- int required_gles_minor)
+gdk_gl_context_check_gl_version (GdkGLContext *self,
+ const GdkGLVersion *required_gl,
+ const GdkGLVersion *required_gles)
{
GdkGLContextPrivate *priv = gdk_gl_context_get_instance_private (self);
g_return_val_if_fail (GDK_IS_GL_CONTEXT (self), FALSE);
- g_return_val_if_fail (required_gl_minor < 10, FALSE);
- g_return_val_if_fail (required_gles_minor < 10, FALSE);
if (!gdk_gl_context_is_realized (self))
return FALSE;
switch (priv->api)
{
case GDK_GL_API_GL:
- return priv->gl_version >= required_gl_major * 10 + required_gl_minor;
+ return required_gl == NULL || gdk_gl_version_greater_equal (&priv->gl_version, required_gl);
case GDK_GL_API_GLES:
- return priv->gl_version >= required_gles_major * 10 + required_gles_minor;
+ return required_gles == NULL || gdk_gl_version_greater_equal (&priv->gl_version, required_gles);
default:
g_return_val_if_reached (FALSE);
if (priv->extensions_checked)
return;
- priv->gl_version = epoxy_gl_version ();
+ gdk_gl_version_init_epoxy (&priv->gl_version);
priv->has_debug_output = epoxy_has_gl_extension ("GL_ARB_debug_output") ||
epoxy_has_gl_extension ("GL_KHR_debug");
priv->has_khr_debug = epoxy_has_gl_extension ("GL_KHR_debug");
/* We asked for a core profile, but we didn't get one, so we're in legacy mode */
- if (priv->gl_version < 32)
+ if (!gdk_gl_version_greater_equal (&priv->gl_version, &GDK_GL_VERSION_INIT (3, 2)))
priv->is_legacy = TRUE;
}
glGetIntegerv (GL_MAX_LABEL_LENGTH, &priv->max_debug_label_length);
}
- priv->has_half_float = gdk_gl_context_check_version (context, 3, 0, 3, 0) ||
+ priv->has_half_float = gdk_gl_context_check_version (context, "3.0", "3.0") ||
epoxy_has_gl_extension ("OES_vertex_half_float");
#ifdef G_ENABLE_DEBUG
" - GL_EXT_unpack_subimage: %s\n"
" - OES_vertex_half_float: %s",
gdk_gl_context_get_use_es (context) ? "OpenGL ES" : "OpenGL",
- priv->gl_version / 10, priv->gl_version % 10,
+ gdk_gl_version_get_major (&priv->gl_version), gdk_gl_version_get_minor (&priv->gl_version),
priv->is_legacy ? "legacy" : "core",
glGetString (GL_SHADING_LANGUAGE_VERSION),
max_texture_size,
g_return_if_fail (gdk_gl_context_is_realized (context));
if (major != NULL)
- *major = priv->gl_version / 10;
+ *major = gdk_gl_version_get_major (&priv->gl_version);
if (minor != NULL)
- *minor = priv->gl_version % 10;
+ *minor = gdk_gl_version_get_minor (&priv->gl_version);
}
/**
GError **error);
void gdk_gl_context_set_is_legacy (GdkGLContext *context,
gboolean is_legacy);
+gboolean gdk_gl_context_check_gl_version (GdkGLContext *context,
+ const GdkGLVersion *gl_version,
+ const GdkGLVersion *gles_version);
+
+static inline gboolean
+gdk_gl_context_check_version (GdkGLContext *context,
+ const char *gl_version,
+ const char *gles_version)
+{
+ return gdk_gl_context_check_gl_version (context,
+ gl_version ? &GDK_GL_VERSION_STRING (gl_version) : NULL,
+ gles_version ? &GDK_GL_VERSION_STRING (gles_version) : NULL);
+}
-gboolean gdk_gl_context_check_version (GdkGLContext *context,
- int required_gl_major,
- int required_gl_minor,
- int required_gles_major,
- int required_gles_minor);
void gdk_gl_context_get_clipped_version (GdkGLContext *context,
const GdkGLVersion *min_version,
GdkGLVersion *out_clipped);
glGenFramebuffers (1, &fbo);
glBindFramebuffer (GL_FRAMEBUFFER, fbo);
glFramebufferTexture2D (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, self->id, 0);
- if (gdk_gl_context_check_version (context, 4, 3, 3, 1))
+ if (gdk_gl_context_check_version (context, "4.3", "3.1"))
{
gdk_gl_context_get_version (context, &major, &minor);
glGetFramebufferParameteriv (GL_FRAMEBUFFER, GL_IMPLEMENTATION_COLOR_READ_FORMAT, &gl_read_format);
if (context == NULL ||
!gdk_gl_context_is_shared (self->context, context) ||
/* ... or glGetTexLevelParameter() isn't supported */
- !gdk_gl_context_check_version (context, 0, 0, 3, 1))
+ !gdk_gl_context_check_version (context, NULL, "3.1"))
{
texture->format = GDK_MEMORY_DEFAULT;
self->has_mipmap = FALSE;
}
}
- self->has_samplers = gdk_gl_context_check_version (context, 3, 3, 3, 0);
+ self->has_samplers = gdk_gl_context_check_version (context, "3.3", "3.0");
/* create the samplers */
if (self->has_samplers)
glTexSubImage2D (GL_TEXTURE_2D, 0, x, y, width, height, gl_format, gl_type, data);
}
else if (stride % bpp == 0 &&
- (gdk_gl_context_check_version (self->context, 0, 0, 3, 0) || gdk_gl_context_has_unpack_subimage (self->context)))
+ (gdk_gl_context_check_version (self->context, NULL, "3.0") || gdk_gl_context_has_unpack_subimage (self->context)))
{
glPixelStorei (GL_UNPACK_ROW_LENGTH, stride / bpp);
}
if (gsk_render_node_prefers_high_depth (root) &&
- gdk_gl_context_check_version (self->context, 3, 0, 3, 0))
+ gdk_gl_context_check_version (self->context, "3.0", "3.0"))
format = GL_RGBA32F;
else
format = GL_RGBA8;
{
int size;
- if (!gdk_gl_context_check_version (context, 0, 0, 3, 0))
+ if (!gdk_gl_context_check_version (context, NULL, "3.0"))
return GL_RGBA8;
glBindFramebuffer (GL_FRAMEBUFFER, framebuffer);