summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/eglfs
diff options
context:
space:
mode:
authorGirish Ramakrishnan <girish.1.ramakrishnan@nokia.com>2012-06-01 12:04:35 -0700
committerQt by Nokia <qt-info@nokia.com>2012-06-05 18:48:16 +0200
commitf35470a442286018f91cc4cdc7571a5c99926d99 (patch)
treeb5d7221635aa4dd49c6d8078dd23b89c178a96cb /src/plugins/platforms/eglfs
parente1774d202912b5d053872f242c61d964a5d69450 (diff)
eglfs refactor: Move egl initialization to the integration
Change-Id: If2c870538c742fd034fb9e5c115e4ac0bd8e2e03 Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com>
Diffstat (limited to 'src/plugins/platforms/eglfs')
-rw-r--r--src/plugins/platforms/eglfs/qeglfsintegration.cpp39
-rw-r--r--src/plugins/platforms/eglfs/qeglfsintegration.h1
-rw-r--r--src/plugins/platforms/eglfs/qeglfsscreen.cpp42
-rw-r--r--src/plugins/platforms/eglfs/qeglfsscreen.h4
4 files changed, 44 insertions, 42 deletions
diff --git a/src/plugins/platforms/eglfs/qeglfsintegration.cpp b/src/plugins/platforms/eglfs/qeglfsintegration.cpp
index a42f685a38..94bf0d9732 100644
--- a/src/plugins/platforms/eglfs/qeglfsintegration.cpp
+++ b/src/plugins/platforms/eglfs/qeglfsintegration.cpp
@@ -66,7 +66,7 @@
QT_BEGIN_NAMESPACE
QEglFSIntegration::QEglFSIntegration()
- : mEventDispatcher(createUnixEventDispatcher()), mFontDb(new QGenericUnixFontDatabase()), mScreen(new QEglFSScreen)
+ : mEventDispatcher(createUnixEventDispatcher()), mFontDb(new QGenericUnixFontDatabase())
{
QGuiApplicationPrivate::instance()->setEventDispatcher(mEventDispatcher);
@@ -74,6 +74,40 @@ QEglFSIntegration::QEglFSIntegration()
new QEvdevMouseManager(QLatin1String("EvdevMouse"), QString() /* spec */, this);
new QEvdevTouchScreenHandlerThread(QString() /* spec */, this);
+ hooks->platformInit();
+
+ EGLint major, minor;
+
+ if (!eglBindAPI(EGL_OPENGL_ES_API)) {
+ qWarning("Could not bind GL_ES API\n");
+ qFatal("EGL error");
+ }
+
+ mDisplay = eglGetDisplay(hooks ? hooks->platformDisplay() : EGL_DEFAULT_DISPLAY);
+ if (mDisplay == EGL_NO_DISPLAY) {
+ qWarning("Could not open egl display\n");
+ qFatal("EGL error");
+ }
+ qWarning("Opened display %p\n", mDisplay);
+
+ if (!eglInitialize(mDisplay, &major, &minor)) {
+ qWarning("Could not initialize egl display\n");
+ qFatal("EGL error");
+ }
+
+ qWarning("Initialized display %d %d\n", major, minor);
+
+ int swapInterval = 1;
+ QByteArray swapIntervalString = qgetenv("QT_QPA_EGLFS_SWAPINTERVAL");
+ if (!swapIntervalString.isEmpty()) {
+ bool ok;
+ swapInterval = swapIntervalString.toInt(&ok);
+ if (!ok)
+ swapInterval = 1;
+ }
+ eglSwapInterval(mDisplay, swapInterval);
+
+ mScreen = new QEglFSScreen(mDisplay);
screenAdded(mScreen);
#ifdef QEGL_EXTRA_DEBUG
@@ -84,6 +118,9 @@ QEglFSIntegration::QEglFSIntegration()
QEglFSIntegration::~QEglFSIntegration()
{
delete mScreen;
+
+ eglTerminate(mDisplay);
+ hooks->platformDestroy();
}
bool QEglFSIntegration::hasCapability(QPlatformIntegration::Capability cap) const
diff --git a/src/plugins/platforms/eglfs/qeglfsintegration.h b/src/plugins/platforms/eglfs/qeglfsintegration.h
index 14cec21d13..341b5536b9 100644
--- a/src/plugins/platforms/eglfs/qeglfsintegration.h
+++ b/src/plugins/platforms/eglfs/qeglfsintegration.h
@@ -76,6 +76,7 @@ public:
void *nativeResourceForContext(const QByteArray &resource, QOpenGLContext *context);
private:
+ EGLDisplay mDisplay;
QAbstractEventDispatcher *mEventDispatcher;
QPlatformFontDatabase *mFontDb;
QPlatformScreen *mScreen;
diff --git a/src/plugins/platforms/eglfs/qeglfsscreen.cpp b/src/plugins/platforms/eglfs/qeglfsscreen.cpp
index 007829b682..8374ba5707 100644
--- a/src/plugins/platforms/eglfs/qeglfsscreen.cpp
+++ b/src/plugins/platforms/eglfs/qeglfsscreen.cpp
@@ -78,8 +78,9 @@ public:
}
};
-QEglFSScreen::QEglFSScreen()
- : m_depth(32)
+QEglFSScreen::QEglFSScreen(EGLDisplay dpy)
+ : m_dpy(dpy)
+ , m_depth(32)
, m_format(QImage::Format_Invalid)
, m_platformContext(0)
, m_surface(0)
@@ -90,39 +91,6 @@ QEglFSScreen::QEglFSScreen()
qWarning("QEglScreen %p\n", this);
#endif
- hooks->platformInit();
-
- EGLint major, minor;
-
- if (!eglBindAPI(EGL_OPENGL_ES_API)) {
- qWarning("Could not bind GL_ES API\n");
- qFatal("EGL error");
- }
-
- m_dpy = eglGetDisplay(hooks ? hooks->platformDisplay() : EGL_DEFAULT_DISPLAY);
- if (m_dpy == EGL_NO_DISPLAY) {
- qWarning("Could not open egl display\n");
- qFatal("EGL error");
- }
- qWarning("Opened display %p\n", m_dpy);
-
- if (!eglInitialize(m_dpy, &major, &minor)) {
- qWarning("Could not initialize egl display\n");
- qFatal("EGL error");
- }
-
- qWarning("Initialized display %d %d\n", major, minor);
-
- int swapInterval = 1;
- QByteArray swapIntervalString = qgetenv("QT_QPA_EGLFS_SWAPINTERVAL");
- if (!swapIntervalString.isEmpty()) {
- bool ok;
- swapInterval = swapIntervalString.toInt(&ok);
- if (!ok)
- swapInterval = 1;
- }
- eglSwapInterval(m_dpy, swapInterval);
-
static int hideCursor = qgetenv("QT_QPA_EGLFS_HIDECURSOR").toInt();
if (!hideCursor) {
if (QEglFSCursor *customCursor = hooks->createCursor(this))
@@ -140,10 +108,6 @@ QEglFSScreen::~QEglFSScreen()
eglDestroySurface(m_dpy, m_surface);
hooks->destroyNativeWindow(m_window);
-
- eglTerminate(m_dpy);
-
- hooks->platformDestroy();
}
void QEglFSScreen::createAndSetPlatformContext() const {
diff --git a/src/plugins/platforms/eglfs/qeglfsscreen.h b/src/plugins/platforms/eglfs/qeglfsscreen.h
index ba5db653ad..7b8860e9df 100644
--- a/src/plugins/platforms/eglfs/qeglfsscreen.h
+++ b/src/plugins/platforms/eglfs/qeglfsscreen.h
@@ -56,7 +56,7 @@ class QEglFSCursor;
class QEglFSScreen : public QPlatformScreen //huh: FullScreenScreen ;) just to follow namespace
{
public:
- QEglFSScreen();
+ QEglFSScreen(EGLDisplay display);
~QEglFSScreen();
QRect geometry() const;
@@ -74,11 +74,11 @@ private:
void createAndSetPlatformContext() const;
void createAndSetPlatformContext();
+ EGLDisplay m_dpy;
QRect m_geometry;
int m_depth;
QImage::Format m_format;
QPlatformOpenGLContext *m_platformContext;
- EGLDisplay m_dpy;
EGLSurface m_surface;
EGLNativeWindowType m_window;
QEglFSCursor *m_cursor;