eglfs refactor: Query screen and format info from hooks

This allows boards to customize what they really work best for
without having to set environment variables.

Change-Id: Ib40c3a870ade568f66e37e621a8abc6b17e39411
Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com>
bb10
Girish Ramakrishnan 2012-06-01 12:18:45 -07:00 committed by Qt by Nokia
parent f35470a442
commit b5e041d48d
4 changed files with 42 additions and 42 deletions

View File

@ -43,6 +43,8 @@
#define QEGLFSHOOKS_H
#include <qpa/qplatformintegration.h>
#include <QtGui/QSurfaceFormat>
#include <QtGui/QImage>
#include <EGL/egl.h>
QT_BEGIN_NAMESPACE
@ -57,6 +59,9 @@ public:
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;

View File

@ -61,6 +61,39 @@ QSize QEglFSHooks::screenSize() 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);

View File

@ -80,8 +80,6 @@ public:
QEglFSScreen::QEglFSScreen(EGLDisplay dpy)
: m_dpy(dpy)
, m_depth(32)
, m_format(QImage::Format_Invalid)
, m_platformContext(0)
, m_surface(0)
, m_window(0)
@ -116,28 +114,7 @@ void QEglFSScreen::createAndSetPlatformContext() const {
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);
@ -157,33 +134,21 @@ void QEglFSScreen::createAndSetPlatformContext()
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

View File

@ -75,9 +75,6 @@ private:
void createAndSetPlatformContext();
EGLDisplay m_dpy;
QRect m_geometry;
int m_depth;
QImage::Format m_format;
QPlatformOpenGLContext *m_platformContext;
EGLSurface m_surface;
EGLNativeWindowType m_window;