138 lines
5.2 KiB
Diff
138 lines
5.2 KiB
Diff
|
From 84e3ffc449f67ed1aa3df66d6fca1c26e49125aa Mon Sep 17 00:00:00 2001
|
||
|
From: Andrew Knight <andrew.knight@digia.com>
|
||
|
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 <wayland-egl.h>
|
||
|
|
||
|
-#define GL_GLEXT_PROTOTYPES
|
||
|
-#include <GLES2/gl2.h>
|
||
|
-#include <GLES2/gl2ext.h>
|
||
|
-
|
||
|
#define EGL_EGLEXT_PROTOTYPES
|
||
|
#include <EGL/egl.h>
|
||
|
#include <EGL/eglext.h>
|
||
|
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<QWaylandGLContext *>(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<EGLint> 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<QWaylandEglWindow *>(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 <qpa/qplatformopenglcontext.h>
|
||
|
+#include <QtGui/QOpenGLFunctions>
|
||
|
|
||
|
#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 <EGL/egl.h>
|
||
|
#include <EGL/eglext.h>
|
||
|
|
||
|
-#include <GLES2/gl2.h>
|
||
|
-#include <GLES2/gl2ext.h>
|
||
|
-
|
||
|
#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
|
||
|
|