From 84e3ffc449f67ed1aa3df66d6fca1c26e49125aa Mon Sep 17 00:00:00 2001 From: Andrew Knight Date: Fri, 22 Nov 2013 09:18:59 +0200 Subject: [PATCH] Wayland-EGL QPA: Support desktop OpenGL as well There is no hard requirement on OpenGL ES 2 in this plugin, so allow Desktop OpenGL as well. Change-Id: I5b58f21c3640a4403dc6aa710838d4904d85f482 --- config.tests/egl/egl.pro | 2 +- config.tests/wayland_egl/wayland_egl.pro | 2 +- .../platforms/qwayland-egl/qwaylandeglinclude.h | 4 ---- .../platforms/qwayland-egl/qwaylandglcontext.cpp | 21 ++++++++++++++++++++- .../platforms/qwayland-egl/qwaylandglcontext.h | 4 +++- .../wayland-egl/waylandeglintegration.cpp | 3 --- 6 files changed, 25 insertions(+), 11 deletions(-) diff --git a/config.tests/egl/egl.pro b/config.tests/egl/egl.pro index e96672e..9886579 100644 --- a/config.tests/egl/egl.pro +++ b/config.tests/egl/egl.pro @@ -1,7 +1,7 @@ TARGET = egl QT = core -!contains(QT_CONFIG, opengles2):error("wayland_egl support currently requires Qt configured with OpenGL ES2") +!contains(QT_CONFIG, opengl): error("wayland_egl support requires Qt configured with OpenGL") !contains(QT_CONFIG, no-pkg-config) { CONFIG += link_pkgconfig diff --git a/config.tests/wayland_egl/wayland_egl.pro b/config.tests/wayland_egl/wayland_egl.pro index 0db9b04..3b7fdfe 100644 --- a/config.tests/wayland_egl/wayland_egl.pro +++ b/config.tests/wayland_egl/wayland_egl.pro @@ -1,7 +1,7 @@ TARGET = wayland_egl QT = core -!contains(QT_CONFIG, opengles2):error("wayland_egl support currently requires Qt configured with OpenGL ES2") +!contains(QT_CONFIG, opengl): error("wayland_egl support requires Qt configured with OpenGL") !contains(QT_CONFIG, no-pkg-config) { CONFIG += link_pkgconfig diff --git a/src/plugins/platforms/qwayland-egl/qwaylandeglinclude.h b/src/plugins/platforms/qwayland-egl/qwaylandeglinclude.h index fb42d43..9b151a5 100644 --- a/src/plugins/platforms/qwayland-egl/qwaylandeglinclude.h +++ b/src/plugins/platforms/qwayland-egl/qwaylandeglinclude.h @@ -47,10 +47,6 @@ #include -#define GL_GLEXT_PROTOTYPES -#include -#include - #define EGL_EGLEXT_PROTOTYPES #include #include diff --git a/src/plugins/platforms/qwayland-egl/qwaylandglcontext.cpp b/src/plugins/platforms/qwayland-egl/qwaylandglcontext.cpp index 303e59f..278359b 100644 --- a/src/plugins/platforms/qwayland-egl/qwaylandglcontext.cpp +++ b/src/plugins/platforms/qwayland-egl/qwaylandglcontext.cpp @@ -67,7 +67,23 @@ QWaylandGLContext::QWaylandGLContext(EGLDisplay eglDisplay, const QSurfaceFormat { m_shareEGLContext = share ? static_cast(share)->eglContext() : EGL_NO_CONTEXT; - eglBindAPI(EGL_OPENGL_ES_API); + switch (m_format.renderableType()) { + case QSurfaceFormat::OpenVG: + eglBindAPI(EGL_OPENVG_API); + break; +#ifdef EGL_VERSION_1_4 +# if !defined(QT_OPENGL_ES_2) + case QSurfaceFormat::DefaultRenderableType: +# endif + case QSurfaceFormat::OpenGL: + eglBindAPI(EGL_OPENGL_API); + break; +#endif + case QSurfaceFormat::OpenGLES: + default: + eglBindAPI(EGL_OPENGL_ES_API); + break; + } QVector eglContextAttrs; eglContextAttrs.append(EGL_CONTEXT_CLIENT_VERSION); @@ -91,6 +107,9 @@ QWaylandGLContext::~QWaylandGLContext() bool QWaylandGLContext::makeCurrent(QPlatformSurface *surface) { + if (!isInitialized(QOpenGLFunctions::d_ptr)) + initializeOpenGLFunctions(); + QWaylandEglWindow *window = static_cast(surface); window->setCanResize(false); diff --git a/src/plugins/platforms/qwayland-egl/qwaylandglcontext.h b/src/plugins/platforms/qwayland-egl/qwaylandglcontext.h index bc231e8..3e1eb3e 100644 --- a/src/plugins/platforms/qwayland-egl/qwaylandglcontext.h +++ b/src/plugins/platforms/qwayland-egl/qwaylandglcontext.h @@ -45,6 +45,7 @@ #include "qwaylanddisplay.h" #include +#include #include "qwaylandeglinclude.h" @@ -55,7 +56,8 @@ class QWaylandGLWindowSurface; class QOpenGLShaderProgram; class QOpenGLTextureCache; -class QWaylandGLContext : public QPlatformOpenGLContext { +class QWaylandGLContext : public QPlatformOpenGLContext, protected QOpenGLFunctions +{ public: QWaylandGLContext(EGLDisplay eglDisplay, const QSurfaceFormat &format, QPlatformOpenGLContext *share); ~QWaylandGLContext(); diff --git a/src/plugins/waylandcompositors/wayland-egl/waylandeglintegration.cpp b/src/plugins/waylandcompositors/wayland-egl/waylandeglintegration.cpp index ae0bebf..994e059 100644 --- a/src/plugins/waylandcompositors/wayland-egl/waylandeglintegration.cpp +++ b/src/plugins/waylandcompositors/wayland-egl/waylandeglintegration.cpp @@ -54,9 +54,6 @@ #include #include -#include -#include - #ifndef EGL_WL_bind_wayland_display typedef EGLBoolean (EGLAPIENTRYP PFNEGLBINDWAYLANDDISPLAYWL) (EGLDisplay dpy, struct wl_display *display); typedef EGLBoolean (EGLAPIENTRYP PFNEGLUNBINDWAYLANDDISPLAYWL) (EGLDisplay dpy, struct wl_display *display); -- 1.8.4.2