summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/eglconvenience/qeglplatformcontext.cpp
diff options
context:
space:
mode:
authorJørgen Lind <jorgen.lind@nokia.com>2010-07-12 08:34:20 (GMT)
committerJørgen Lind <jorgen.lind@nokia.com>2010-07-12 08:34:20 (GMT)
commit4892e8fcebdbdb8a612189682f3a18db6cb51158 (patch)
treec359e73564b95b307cc4808173995b9c97e6be42 /src/plugins/platforms/eglconvenience/qeglplatformcontext.cpp
parent82ea3e45567dbe83d97638124e7351dc462afe3c (diff)
downloadQt-4892e8fcebdbdb8a612189682f3a18db6cb51158.zip
Qt-4892e8fcebdbdb8a612189682f3a18db6cb51158.tar.gz
Qt-4892e8fcebdbdb8a612189682f3a18db6cb51158.tar.bz2
Lighthouse egl refactoring
Moved the openkode egl code into a convenience directory so it can be used by other plugins
Diffstat (limited to 'src/plugins/platforms/eglconvenience/qeglplatformcontext.cpp')
-rw-r--r--src/plugins/platforms/eglconvenience/qeglplatformcontext.cpp104
1 files changed, 104 insertions, 0 deletions
diff --git a/src/plugins/platforms/eglconvenience/qeglplatformcontext.cpp b/src/plugins/platforms/eglconvenience/qeglplatformcontext.cpp
new file mode 100644
index 0000000..6afeb70
--- /dev/null
+++ b/src/plugins/platforms/eglconvenience/qeglplatformcontext.cpp
@@ -0,0 +1,104 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** 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 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://www.qtsoftware.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qeglplatformcontext.h"
+
+#include <EGL/egl.h>
+
+#include <QtCore/QDebug>
+#include <QtGui/QPlatformWindow>
+
+QEGLPlatformContext::QEGLPlatformContext(EGLDisplay display, EGLConfig config, EGLint contextAttrs[], EGLSurface surface, EGLenum eglApi)
+ : m_eglDisplay(display)
+ , m_eglSurface(surface)
+ , m_eglApi(eglApi)
+{
+ if (m_eglSurface == EGL_NO_SURFACE) {
+ qWarning("Createing QEGLPlatformContext with no surface");
+ }
+
+ eglBindAPI(m_eglApi);
+ m_eglContext = eglCreateContext(m_eglDisplay,config, 0,contextAttrs);
+ if (!m_eglContext) {
+ qErrnoWarning("QEGLPlatformContext could not create eglContext");
+ }
+}
+
+QEGLPlatformContext::~QEGLPlatformContext()
+{
+ if (m_eglSurface != EGL_NO_SURFACE) {
+ doneCurrent();
+ eglDestroySurface(m_eglDisplay, m_eglSurface);
+ m_eglSurface = EGL_NO_SURFACE;
+ }
+
+ if (m_eglContext != EGL_NO_CONTEXT) {
+ eglDestroyContext(m_eglDisplay, m_eglContext);
+ m_eglContext = EGL_NO_CONTEXT;
+ }
+}
+
+void QEGLPlatformContext::makeCurrent()
+{
+ eglBindAPI(m_eglApi);
+ bool ok = eglMakeCurrent(m_eglDisplay, m_eglSurface, m_eglSurface, m_eglContext);
+ if (!ok)
+ qWarning() << "QEGLPlatformContext::makeCurrent(" << m_eglSurface << "):" << eglGetError();
+}
+void QEGLPlatformContext::doneCurrent()
+{
+ eglBindAPI(m_eglApi);
+ bool ok = eglMakeCurrent(m_eglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
+ if (!ok)
+ qWarning() << "QEGLPlatformContext::doneCurrent():" << eglGetError();
+}
+void QEGLPlatformContext::swapBuffers()
+{
+ eglBindAPI(m_eglApi);
+ bool ok = eglSwapBuffers(m_eglDisplay, m_eglSurface);
+ if (!ok)
+ qWarning() << "QEGLPlatformContext::swapBuffers():" << eglGetError();
+}
+void* QEGLPlatformContext::getProcAddress(const QString& procName)
+{
+ eglBindAPI(m_eglApi);
+ return (void *)eglGetProcAddress(qPrintable(procName));
+}