summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/eglfs/qeglfswindow.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/platforms/eglfs/qeglfswindow.cpp')
-rw-r--r--src/plugins/platforms/eglfs/qeglfswindow.cpp50
1 files changed, 49 insertions, 1 deletions
diff --git a/src/plugins/platforms/eglfs/qeglfswindow.cpp b/src/plugins/platforms/eglfs/qeglfswindow.cpp
index 379150cfa6..5e6d09a637 100644
--- a/src/plugins/platforms/eglfs/qeglfswindow.cpp
+++ b/src/plugins/platforms/eglfs/qeglfswindow.cpp
@@ -40,13 +40,19 @@
****************************************************************************/
#include "qeglfswindow.h"
-
+#include "qeglfshooks.h"
#include <QtGui/QWindowSystemInterface>
+#include <QtPlatformSupport/private/qeglconvenience_p.h>
+
+#include <QtDebug>
+
QT_BEGIN_NAMESPACE
QEglFSWindow::QEglFSWindow(QWindow *w)
: QPlatformWindow(w)
+ , m_surface(0)
+ , m_window(0)
{
static int serialNo = 0;
m_winid = ++serialNo;
@@ -57,6 +63,43 @@ QEglFSWindow::QEglFSWindow(QWindow *w)
setWindowState(Qt::WindowFullScreen);
}
+QEglFSWindow::~QEglFSWindow()
+{
+ destroy();
+}
+
+void QEglFSWindow::create()
+{
+ if (m_window) {
+ return;
+ }
+
+ EGLDisplay display = (static_cast<QEglFSScreen *>(window()->screen()->handle()))->display();
+ QSurfaceFormat platformFormat = hooks->defaultSurfaceFormat();
+ EGLConfig config = q_configFromGLFormat(display, platformFormat);
+ m_window = hooks->createNativeWindow(hooks->screenSize());
+ m_surface = eglCreateWindowSurface(display, config, m_window, NULL);
+ if (m_surface == EGL_NO_SURFACE) {
+ qWarning("Could not create the egl surface: error = 0x%x\n", eglGetError());
+ eglTerminate(display);
+ qFatal("EGL error");
+ }
+}
+
+void QEglFSWindow::destroy()
+{
+ if (m_surface) {
+ EGLDisplay display = (static_cast<QEglFSScreen *>(window()->screen()->handle()))->display();
+ eglDestroySurface(display, m_surface);
+ m_surface = 0;
+ }
+
+ if (m_window) {
+ hooks->destroyNativeWindow(m_window);
+ m_window = 0;
+ }
+}
+
void QEglFSWindow::setGeometry(const QRect &)
{
// We only support full-screen windows
@@ -77,4 +120,9 @@ WId QEglFSWindow::winId() const
return m_winid;
}
+QSurfaceFormat QEglFSWindow::format() const
+{
+ return hooks->defaultSurfaceFormat();
+}
+
QT_END_NAMESPACE