From c1c5aca6f1cafc967ee063240b48c361dfab272d Mon Sep 17 00:00:00 2001 From: Fabian Bumberger Date: Sat, 1 Feb 2014 12:41:27 +0100 Subject: [PATCH] [QNX] Handle the case when an egl surface can not be created If an egl surface can not be created (e.g. when out of memory) the application should not crash. In this case we will not be able to make the egl surface current and have to return false in the makeCurrent call in QQnxGlContext. Change-Id: If9b5a82a0f64dc0a42bee687d351bea43fb05d51 Reviewed-by: Rafael Roquetto --- src/plugins/platforms/qnx/qqnxeglwindow.cpp | 5 +++-- src/plugins/platforms/qnx/qqnxglcontext.cpp | 3 ++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/plugins/platforms/qnx/qqnxeglwindow.cpp b/src/plugins/platforms/qnx/qqnxeglwindow.cpp index 8acb258a1d..931fe0b288 100644 --- a/src/plugins/platforms/qnx/qqnxeglwindow.cpp +++ b/src/plugins/platforms/qnx/qqnxeglwindow.cpp @@ -79,8 +79,9 @@ void QQnxEglWindow::createEGLSurface() // the window's buffers before we create the EGL surface const QSize surfaceSize = requestedBufferSize(); if (!surfaceSize.isValid()) { - qFatal("QQNX: Trying to create 0 size EGL surface. " + qWarning("QQNX: Trying to create 0 size EGL surface. " "Please set a valid window size before calling QOpenGLContext::makeCurrent()"); + return; } setBufferSize(surfaceSize); @@ -98,7 +99,7 @@ void QQnxEglWindow::createEGLSurface() (EGLNativeWindowType) nativeHandle(), eglSurfaceAttrs); if (m_eglSurface == EGL_NO_SURFACE) { const EGLenum error = QQnxGLContext::checkEGLError("eglCreateWindowSurface"); - qFatal("QQNX: failed to create EGL surface, err=%d", error); + qWarning("QQNX: failed to create EGL surface, err=%d", error); } } diff --git a/src/plugins/platforms/qnx/qqnxglcontext.cpp b/src/plugins/platforms/qnx/qqnxglcontext.cpp index 3e6ee201f6..3a365be408 100644 --- a/src/plugins/platforms/qnx/qqnxglcontext.cpp +++ b/src/plugins/platforms/qnx/qqnxglcontext.cpp @@ -227,7 +227,8 @@ bool QQnxGLContext::makeCurrent(QPlatformSurface *surface) eglResult = eglMakeCurrent(ms_eglDisplay, m_currentEglSurface, m_currentEglSurface, m_eglContext); if (eglResult != EGL_TRUE) { checkEGLError("eglMakeCurrent"); - qFatal("QQNX: failed to set current EGL context, err=%d", eglGetError()); + qWarning("QQNX: failed to set current EGL context, err=%d", eglGetError()); + return false; } return (eglResult == EGL_TRUE); }