gl-renderer: save OpenGL version in renderer context
authorArnaud Vrac <rawoul@gmail.com>
Wed, 17 Jan 2018 18:36:32 +0000 (19:36 +0100)
committerDaniel Stone <daniels@collabora.com>
Thu, 18 Jan 2018 11:07:41 +0000 (11:07 +0000)
This will allow to make some assumptions in further patches when GLES3
is available.

Signed-off-by: Arnaud Vrac <avrac@freebox.fr>
Reviewed-by: Derek Foreman <derekf@osg.samsung.com>
Reviewed-by: Daniel Stone <daniels@collabora.com>
libweston/gl-renderer.c

index abf556f03de3a7c03061db08b63ebcfa8714943f..c4b6af18b82ad699fd9dafc61e3b045663376561 100644 (file)
 #include "shared/timespec-util.h"
 #include "weston-egl-ext.h"
 
+#define GR_GL_VERSION(major, minor) \
+       (((uint32_t)(major) << 16) | (uint32_t)(minor))
+
+#define GR_GL_VERSION_INVALID \
+       GR_GL_VERSION(0, 0)
+
 struct gl_shader {
        GLuint program;
        GLuint vertex_shader, fragment_shader;
@@ -199,6 +205,8 @@ struct gl_renderer {
 
        EGLSurface dummy_surface;
 
+       uint32_t gl_version;
+
        struct wl_array vertices;
        struct wl_array vtxcnt;
 
@@ -3586,6 +3594,22 @@ fan_debug_repaint_binding(struct weston_keyboard *keyboard,
        weston_compositor_damage_all(compositor);
 }
 
+static uint32_t
+get_gl_version(void)
+{
+       const char *version;
+       int major, minor;
+
+       version = (const char *) glGetString(GL_VERSION);
+       if (version &&
+           (sscanf(version, "%d.%d", &major, &minor) == 2 ||
+            sscanf(version, "OpenGL ES %d.%d", &major, &minor) == 2)) {
+               return GR_GL_VERSION(major, minor);
+       }
+
+       return GR_GL_VERSION_INVALID;
+}
+
 static int
 gl_renderer_setup(struct weston_compositor *ec, EGLSurface egl_surface)
 {
@@ -3626,6 +3650,13 @@ gl_renderer_setup(struct weston_compositor *ec, EGLSurface egl_surface)
                return -1;
        }
 
+       gr->gl_version = get_gl_version();
+       if (gr->gl_version == GR_GL_VERSION_INVALID) {
+               weston_log("warning: failed to detect GLES version, "
+                          "defaulting to 2.0.\n");
+               gr->gl_version = GR_GL_VERSION(2, 0);
+       }
+
        log_egl_gl_info(gr->egl_display);
 
        gr->image_target_texture_2d =