diff options
Diffstat (limited to 'src/plugins/platforms/eglfs/deviceintegration/eglfs_mali/qeglfsmaliintegration.cpp')
-rw-r--r-- | src/plugins/platforms/eglfs/deviceintegration/eglfs_mali/qeglfsmaliintegration.cpp | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_mali/qeglfsmaliintegration.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_mali/qeglfsmaliintegration.cpp new file mode 100644 index 0000000000..6e5421d5b9 --- /dev/null +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_mali/qeglfsmaliintegration.cpp @@ -0,0 +1,96 @@ +/**************************************************************************** +** +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL21$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qeglfsmaliintegration.h" +#include <EGL/fbdev_window.h> + +#include <unistd.h> +#include <fcntl.h> +#include <sys/ioctl.h> +#include <linux/fb.h> + +#include <private/qcore_unix_p.h> + +QT_BEGIN_NAMESPACE + +void QEglFSMaliIntegration::platformInit() +{ + // Keep the non-overridden base class functions based on fb0 working. + QEGLDeviceIntegration::platformInit(); + + int fd = qt_safe_open("/dev/fb0", O_RDWR, 0); + if (fd == -1) + qWarning("Failed to open fb to detect screen resolution!"); + + struct fb_var_screeninfo vinfo; + memset(&vinfo, 0, sizeof(vinfo)); + if (ioctl(fd, FBIOGET_VSCREENINFO, &vinfo) == -1) + qWarning("Could not get variable screen info"); + + vinfo.bits_per_pixel = 32; + vinfo.red.length = 8; + vinfo.green.length = 8; + vinfo.blue.length = 8; + vinfo.transp.length = 8; + vinfo.blue.offset = 0; + vinfo.green.offset = 8; + vinfo.red.offset = 16; + vinfo.transp.offset = 24; + vinfo.yres_virtual = 2 * vinfo.yres; + + if (ioctl(fd, FBIOPUT_VSCREENINFO, &vinfo) == -1) + qErrnoWarning(errno, "Unable to set double buffer mode!"); + + qt_safe_close(fd); +} + +EGLNativeWindowType QEglFSMaliIntegration::createNativeWindow(QPlatformWindow *window, const QSize &size, const QSurfaceFormat &format) +{ + Q_UNUSED(window); + Q_UNUSED(format); + + fbdev_window *fbwin = reinterpret_cast<fbdev_window *>(malloc(sizeof(fbdev_window))); + if (NULL == fbwin) + return 0; + + fbwin->width = size.width(); + fbwin->height = size.height(); + return (EGLNativeWindowType)fbwin; +} + +void QEglFSMaliIntegration::destroyNativeWindow(EGLNativeWindowType window) +{ + free(window); +} + +QT_END_NAMESPACE |