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:
parent
735f7e6248
commit
44bc32d9c5
@ -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) {
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user