#define QEGLFSHOOKS_H
#include <qpa/qplatformintegration.h>
+#include <QtGui/QSurfaceFormat>
+#include <QtGui/QImage>
#include <EGL/egl.h>
QT_BEGIN_NAMESPACE
virtual void platformDestroy();
virtual EGLNativeDisplayType platformDisplay() const;
virtual QSize screenSize() const;
+ virtual int screenDepth() const;
+ virtual QImage::Format screenFormat() const;
+ virtual QSurfaceFormat defaultSurfaceFormat() const;
virtual EGLNativeWindowType createNativeWindow(const QSize &size);
virtual void destroyNativeWindow(EGLNativeWindowType window);
virtual bool hasCapability(QPlatformIntegration::Capability cap) const;
return QSize();
}
+int QEglFSHooks::screenDepth() const
+{
+ static int depth = qgetenv("QT_QPA_EGLFS_DEPTH").toInt();
+ return depth == 16 ? 16 : 32;
+}
+
+QImage::Format QEglFSHooks::screenFormat() const
+{
+ return screenDepth() == 16 ? QImage::Format_RGB16 : QImage::Format_RGB32;
+}
+
+QSurfaceFormat QEglFSHooks::defaultSurfaceFormat() const
+{
+ QSurfaceFormat format;
+ if (screenDepth() == 16) {
+ format.setDepthBufferSize(16);
+ format.setRedBufferSize(5);
+ format.setGreenBufferSize(6);
+ format.setBlueBufferSize(5);
+ } else {
+ format.setDepthBufferSize(24);
+ format.setStencilBufferSize(8);
+ format.setRedBufferSize(8);
+ format.setGreenBufferSize(8);
+ format.setBlueBufferSize(8);
+ }
+
+ static int samples = qgetenv("QT_QPA_EGLFS_MULTISAMPLE").toInt();
+ format.setSamples(samples);
+
+ return format;
+}
+
EGLNativeWindowType QEglFSHooks::createNativeWindow(const QSize &size)
{
Q_UNUSED(size);
QEglFSScreen::QEglFSScreen(EGLDisplay dpy)
: m_dpy(dpy)
- , m_depth(32)
- , m_format(QImage::Format_Invalid)
, m_platformContext(0)
, m_surface(0)
, m_window(0)
void QEglFSScreen::createAndSetPlatformContext()
{
- QSurfaceFormat platformFormat;
-
- QByteArray depthString = qgetenv("QT_QPA_EGLFS_DEPTH");
- if (depthString.toInt() == 16) {
- platformFormat.setDepthBufferSize(16);
- platformFormat.setRedBufferSize(5);
- platformFormat.setGreenBufferSize(6);
- platformFormat.setBlueBufferSize(5);
- m_depth = 16;
- m_format = QImage::Format_RGB16;
- } else {
- platformFormat.setDepthBufferSize(24);
- platformFormat.setStencilBufferSize(8);
- platformFormat.setRedBufferSize(8);
- platformFormat.setGreenBufferSize(8);
- platformFormat.setBlueBufferSize(8);
- m_depth = 32;
- m_format = QImage::Format_RGB32;
- }
-
- if (!qgetenv("QT_QPA_EGLFS_MULTISAMPLE").isEmpty())
- platformFormat.setSamples(4);
+ QSurfaceFormat platformFormat = hooks->defaultSurfaceFormat();
EGLConfig config = q_configFromGLFormat(m_dpy, platformFormat);
QEGLPlatformContext *platformContext = new QEglFSContext(platformFormat, 0, m_dpy);
m_platformContext = platformContext;
-
- EGLint w,h; // screen size detection
- eglQuerySurface(m_dpy, m_surface, EGL_WIDTH, &w);
- eglQuerySurface(m_dpy, m_surface, EGL_HEIGHT, &h);
-
- m_geometry = QRect(0,0,w,h);
-
}
QRect QEglFSScreen::geometry() const
{
- if (m_geometry.isNull()) {
- createAndSetPlatformContext();
- }
- return m_geometry;
+ return QRect(QPoint(0, 0), hooks->screenSize());
}
int QEglFSScreen::depth() const
{
- return m_depth;
+ return hooks->screenDepth();
}
QImage::Format QEglFSScreen::format() const
{
- if (m_format == QImage::Format_Invalid)
- createAndSetPlatformContext();
- return m_format;
+ return hooks->screenFormat();
}
QPlatformCursor *QEglFSScreen::cursor() const