static void
gst_gl_window_wayland_egl_init (GstGLWindowWaylandEGL * window)
{
+ window->gl_api = GST_GL_API_NONE;
}
/* Must be called in the gl thread */
goto failure;
}
- if (!eglBindAPI (EGL_OPENGL_ES_API)) {
- g_set_error (error, GST_GL_WINDOW_ERROR, GST_GL_WINDOW_ERROR_FAILED,
- "Failed to bind OpenGL|ES API: %s", WlEGLErrorString ());
- goto failure;
+ if (gl_api & GST_GL_API_OPENGL) {
+ /* egl + opengl only available with EGL 1.4+ */
+ if (majorVersion == 1 && minorVersion <= 3) {
+ if ((gl_api & ~GST_GL_API_OPENGL) == GST_GL_API_NONE) {
+ g_set_error (error, GST_GL_WINDOW_ERROR, GST_GL_WINDOW_ERROR_OLD_LIBS,
+ "EGL version (%i.%i) too old for OpenGL support, (needed at least 1.4)",
+ majorVersion, minorVersion);
+ goto failure;
+ } else {
+ GST_WARNING
+ ("EGL version (%i.%i) too old for OpenGL support, (needed at least 1.4)",
+ majorVersion, minorVersion);
+ if (gl_api & GST_GL_API_GLES2) {
+ goto try_gles2;
+ } else {
+ g_set_error (error, GST_GL_WINDOW_ERROR,
+ GST_GL_WINDOW_ERROR_WRONG_CONFIG,
+ "Failed to choose a suitable OpenGL API");
+ goto failure;
+ }
+ }
+ }
+
+ if (!eglBindAPI (EGL_OPENGL_API)) {
+ g_set_error (error, GST_GL_WINDOW_ERROR, GST_GL_WINDOW_ERROR_FAILED,
+ "Failed to bind OpenGL|ES API: %s", WlEGLErrorString ());
+ goto failure;
+ }
+
+ window_egl->gl_api = GST_GL_API_OPENGL;
+ } else if (gl_api & GST_GL_API_GLES2) {
+ try_gles2:
+ if (!eglBindAPI (EGL_OPENGL_ES_API)) {
+ g_set_error (error, GST_GL_WINDOW_ERROR, GST_GL_WINDOW_ERROR_FAILED,
+ "Failed to bind OpenGL|ES API: %s", WlEGLErrorString ());
+ goto failure;
+ }
+
+ window_egl->gl_api = GST_GL_API_GLES2;
}
if (eglChooseConfig (window_egl->egl_display, config_attrib,
static GstGLAPI
gst_gl_window_wayland_egl_get_gl_api (GstGLWindow * window)
{
- return GST_GL_API_GLES2;
+ return GST_GL_WINDOW_WAYLAND_EGL (window)->gl_api;
}
static void
GST_WARNING
("EGL version (%i.%i) too old for OpenGL support, (needed at least 1.4)",
majorVersion, minorVersion);
- if (gl_api & GST_GL_API_GLES2)
+ if (gl_api & GST_GL_API_GLES2) {
goto try_gles2;
- else
+ } else {
+ g_set_error (error, GST_GL_WINDOW_ERROR,
+ GST_GL_WINDOW_ERROR_WRONG_CONFIG,
+ "Failed to choose a suitable OpenGL API");
goto failure;
+ }
}
}
{
GstGLWindowX11EGL *window_egl = GST_GL_WINDOW_X11_EGL (window);
- return window_egl->
- gl_api ? window_egl->gl_api : GST_GL_API_GLES2 | GST_GL_API_OPENGL;
+ return window_egl->gl_api ? window_egl->
+ gl_api : GST_GL_API_GLES2 | GST_GL_API_OPENGL;
}
static gpointer