directfb: Allocate a special surface for OpenGL

Allocate an RGB16 surface when we need to use OpenGL, set the
custom DSCAPS_GL for this EGL mode. The broadcom hardware would
allow us to use ABGR but we have some issues with the QSurfaceFormat
to select the right kind of surface.

Change-Id: I0fff7906154f3d7afb35b2b5d2bb91510cf3aa4d
Reviewed-by: Girish Ramakrishnan <girish.1.ramakrishnan@nokia.com>
This commit is contained in:
Holger Hans Peter Freyther 2012-05-29 19:14:43 +02:00 committed by Qt by Nokia
parent 735f7e6248
commit 44bc32d9c5
2 changed files with 34 additions and 1 deletions

View File

@ -92,6 +92,8 @@ public:
QDirectFbWindowEGL(QWindow *tlw, QDirectFbInput *inputhandler);
~QDirectFbWindowEGL();
void createDirectFBWindow();
// EGL. Subclass it instead to have different GL integrations?
EGLSurface eglSurface();
@ -169,6 +171,37 @@ QDirectFbWindowEGL::~QDirectFbWindowEGL()
}
}
void QDirectFbWindowEGL::createDirectFBWindow()
{
// Use the default for the raster surface.
if (window()->surfaceType() == QSurface::RasterSurface)
return QDirectFbWindow::createDirectFBWindow();
Q_ASSERT(!m_dfbWindow.data());
DFBWindowDescription description;
memset(&description, 0, sizeof(DFBWindowDescription));
description.flags = DFBWindowDescriptionFlags(DWDESC_WIDTH | DWDESC_HEIGHT|
DWDESC_POSX | DWDESC_POSY|
DWDESC_PIXELFORMAT | DWDESC_SURFACE_CAPS);
description.width = qMax(1, window()->width());
description.height = qMax(1, window()->height());
description.posx = window()->x();
description.posy = window()->y();
description.surface_caps = DSCAPS_GL;
description.pixelformat = DSPF_RGB16;
IDirectFBDisplayLayer *layer;
layer = toDfbScreen(window())->dfbLayer();
DFBResult result = layer->CreateWindow(layer, &description, m_dfbWindow.outPtr());
if (result != DFB_OK)
DirectFBError("QDirectFbWindow: failed to create window", result);
m_dfbWindow->SetOpacity(m_dfbWindow.data(), 0xff);
m_inputHandler->addWindow(m_dfbWindow.data(), window());
}
EGLSurface QDirectFbWindowEGL::eglSurface()
{
if (m_eglSurface == EGL_NO_SURFACE) {

View File

@ -73,7 +73,7 @@ public:
// helper to get access to DirectFB types
IDirectFBSurface *dfbSurface();
private:
protected:
QDirectFBPointer<IDirectFBSurface> m_dfbSurface;
QDirectFBPointer<IDirectFBWindow> m_dfbWindow;
QDirectFbInput *m_inputHandler;