QSizeF EglUtils::physicalScreenSizeFromFb(int framebufferDevice, const QSize &screenSize) { #ifndef Q_OS_LINUX Q_UNUSED(framebufferDevice) #endif const int defaultPhysicalDpi = 100; static QSizeF size; if (size.isEmpty()) { // Note: in millimeters int width = qEnvironmentVariableIntValue("GREENISLAND_QPA_PHYSICAL_WIDTH"); int height = qEnvironmentVariableIntValue("GREENISLAND_QPA_PHYSICAL_HEIGHT"); if (width && height) { size.setWidth(width); size.setHeight(height); return size; } int w = -1; int h = -1; QSize screenResolution; #ifdef Q_OS_LINUX struct fb_var_screeninfo vinfo; if (framebufferDevice != -1) { if (ioctl(framebufferDevice, FBIOGET_VSCREENINFO, &vinfo) == -1) { qCWarning(lcEglConvenience, "Could not query screen info"); } else { w = vinfo.width; h = vinfo.height; screenResolution = QSize(vinfo.xres, vinfo.yres); } } else #endif { // Use the provided screen size, when available, since some platforms may have their own // specific way to query it. Otherwise try querying it from the framebuffer. screenResolution = screenSize.isEmpty() ? screenSizeFromFb(framebufferDevice) : screenSize; } size.setWidth(w <= 0 ? screenResolution.width() * Q_MM_PER_INCH / defaultPhysicalDpi : qreal(w)); size.setHeight(h <= 0 ? screenResolution.height() * Q_MM_PER_INCH / defaultPhysicalDpi : qreal(h)); if (w <= 0 || h <= 0) qCWarning(lcEglConvenience, "Unable to query physical screen size, defaulting to %d dpi.\n" "To override, set GREENISLAND_QPA_PHYSICAL_WIDTH " "and GREENISLAND_QPA_PHYSICAL_HEIGHT (in millimeters).", defaultPhysicalDpi); } return size; }
QDirectFbBlitter::QDirectFbBlitter(const QSize &rect, bool alpha) : QBlittable(rect, dfb_blitter_capabilities()) , m_premult(false) , m_debugPaint(false) { DFBSurfaceDescription surfaceDesc; memset(&surfaceDesc,0,sizeof(DFBSurfaceDescription)); surfaceDesc.width = rect.width(); surfaceDesc.height = rect.height(); // force alpha format to get AlphaFillRectCapability and ExtendedPixmapCapability support alpha = true; if (alpha) { m_premult = true; surfaceDesc.caps = DSCAPS_PREMULTIPLIED; surfaceDesc.pixelformat = QDirectFbBlitter::alphaPixmapFormat(); surfaceDesc.flags = DFBSurfaceDescriptionFlags(DSDESC_WIDTH | DSDESC_HEIGHT | DSDESC_CAPS | DSDESC_PIXELFORMAT); } else { surfaceDesc.flags = DFBSurfaceDescriptionFlags(DSDESC_WIDTH | DSDESC_HEIGHT | DSDESC_PIXELFORMAT); surfaceDesc.pixelformat = QDirectFbBlitter::pixmapFormat(); } if (qEnvironmentVariableIntValue("QT_DIRECTFB_BLITTER_DEBUGPAINT")) m_debugPaint = true; IDirectFB *dfb = QDirectFbConvenience::dfbInterface(); dfb->CreateSurface(dfb , &surfaceDesc, m_surface.outPtr()); m_surface->Clear(m_surface.data(), 0, 0, 0, 0); }
AndroidAssetsFileEngineHandler::AndroidAssetsFileEngineHandler() : m_assetsCache(std::max(5, qEnvironmentVariableIntValue("QT_ANDROID_MAX_ASSETS_CACHE_SIZE"))) , m_hasPrepopulatedCache(false) , m_hasTriedPrepopulatingCache(false) { m_assetManager = QtAndroid::assetManager(); }
int q_screenDepthFromFb(int framebufferDevice) { #ifndef Q_OS_LINUX Q_UNUSED(framebufferDevice) #endif const int defaultDepth = 32; static int depth = qEnvironmentVariableIntValue("QT_QPA_EGLFS_DEPTH"); if (depth == 0) { #ifdef Q_OS_LINUX struct fb_var_screeninfo vinfo; if (framebufferDevice != -1) { if (ioctl(framebufferDevice, FBIOGET_VSCREENINFO, &vinfo) == -1) qWarning("eglconvenience: Could not query screen info"); else depth = vinfo.bits_per_pixel; } if (depth <= 0) depth = defaultDepth; #else depth = defaultDepth; #endif } return depth; }
QT_BEGIN_NAMESPACE QEglFSIntegration::QEglFSIntegration() { mDisableInputHandlers = qEnvironmentVariableIntValue("QT_QPA_EGLFS_DISABLE_INPUT"); initResources(); }
void QBsdFbIntegration::createInputHandlers() { #ifndef QT_NO_TSLIB const bool useTslib = qEnvironmentVariableIntValue("QT_QPA_FB_TSLIB"); if (useTslib) new QTsLibMouseHandler(QLatin1String("TsLib"), QString()); #endif }
bool Capabilities::uploadConflictFiles() const { static auto envIsSet = !qEnvironmentVariableIsEmpty("OWNCLOUD_UPLOAD_CONFLICT_FILES"); static int envValue = qEnvironmentVariableIntValue("OWNCLOUD_UPLOAD_CONFLICT_FILES"); if (envIsSet) return envValue != 0; return _capabilities[QStringLiteral("uploadConflictFiles")].toBool(); }
QSize q_screenSizeFromFb(int framebufferDevice) { #ifndef Q_OS_LINUX Q_UNUSED(framebufferDevice) #endif const int defaultWidth = 800; const int defaultHeight = 600; static QSize size; if (size.isEmpty()) { int width = qEnvironmentVariableIntValue("QT_QPA_EGLFS_WIDTH"); int height = qEnvironmentVariableIntValue("QT_QPA_EGLFS_HEIGHT"); if (width && height) { size.setWidth(width); size.setHeight(height); return size; } #ifdef Q_OS_LINUX struct fb_var_screeninfo vinfo; int xres = -1; int yres = -1; if (framebufferDevice != -1) { if (ioctl(framebufferDevice, FBIOGET_VSCREENINFO, &vinfo) == -1) { qWarning("eglconvenience: Could not read screen info"); } else { xres = vinfo.xres; yres = vinfo.yres; } } size.setWidth(xres <= 0 ? defaultWidth : xres); size.setHeight(yres <= 0 ? defaultHeight : yres); #else size.setWidth(defaultWidth); size.setHeight(defaultHeight); #endif } return size; }
static int hotDocumentsSize() { static int hotDocuments = -1; if (hotDocuments == -1) { bool ok = false; const int fromEnvironment = qEnvironmentVariableIntValue("QTC_CLANG_HOT_DOCUMENTS", &ok); hotDocuments = ok && fromEnvironment >= 1 ? fromEnvironment : DefaultHotDocumentsSize; } return hotDocuments; }
void QEglFSIntegration::createInputHandlers() { #ifndef QT_NO_LIBINPUT if (!qEnvironmentVariableIntValue("QT_QPA_EGLFS_NO_LIBINPUT")) { new QLibInputHandler(QLatin1String("libinput"), QString()); return; } #endif #if !defined(QT_NO_EVDEV) && (!defined(Q_OS_ANDROID) || defined(Q_OS_ANDROID_NO_SDK)) m_kbdMgr = new QEvdevKeyboardManager(QLatin1String("EvdevKeyboard"), QString() /* spec */, this); new QEvdevMouseManager(QLatin1String("EvdevMouse"), QString() /* spec */, this); #ifndef QT_NO_TSLIB const bool useTslib = qEnvironmentVariableIntValue("QT_QPA_EGLFS_TSLIB"); if (useTslib) new QTsLibMouseHandler(QLatin1String("TsLib"), QString() /* spec */); else #endif // QT_NO_TSLIB new QEvdevTouchManager(QLatin1String("EvdevTouch"), QString() /* spec */, this); #endif }
static QString validateDiagnosticOptions(const QStringList &options) { // This is handy for testing, allow disabling validation. if (qEnvironmentVariableIntValue("QTC_CLANG_NO_DIAGNOSTIC_CHECK")) return QString(); for (const QString &option : options) { if (!isValidOption(option)) return ClangDiagnosticConfigsWidget::tr("Option \"%1\" is invalid.").arg(option); } return QString(); }
void QEGLDeviceIntegration::waitForVSync(QPlatformSurface *surface) const { Q_UNUSED(surface); #if defined(FBIO_WAITFORVSYNC) static const bool forceSync = qEnvironmentVariableIntValue("QT_QPA_EGLFS_FORCEVSYNC"); if (forceSync && framebuffer != -1) { int arg = 0; if (ioctl(framebuffer, FBIO_WAITFORVSYNC, &arg) == -1) qWarning("Could not wait for vsync."); } #endif }
QSurfaceFormat QEGLDeviceIntegration::surfaceFormatFor(const QSurfaceFormat &inputFormat) const { QSurfaceFormat format = inputFormat; static const bool force888 = qEnvironmentVariableIntValue("QT_QPA_EGLFS_FORCE888"); if (force888) { format.setRedBufferSize(8); format.setGreenBufferSize(8); format.setBlueBufferSize(8); } return format; }
QDirectFbBlitter::QDirectFbBlitter(const QSize &rect, IDirectFBSurface *surface) : QBlittable(rect, dfb_blitter_capabilities()) , m_surface(surface) , m_debugPaint(false) { m_surface->AddRef(m_surface.data()); DFBSurfaceCapabilities surfaceCaps; m_surface->GetCapabilities(m_surface.data(), &surfaceCaps); m_premult = (surfaceCaps & DSCAPS_PREMULTIPLIED); if (qEnvironmentVariableIntValue("QT_DIRECTFB_BLITTER_DEBUGPAINT")) m_debugPaint = true; }
void QBsdFbIntegration::initialize() { if (m_primaryScreen->initialize()) screenAdded(m_primaryScreen.data()); else qWarning("bsdfb: Failed to initialize screen"); m_inputContext.reset(QPlatformInputContextFactory::create()); m_nativeInterface.reset(new QPlatformNativeInterface); m_vtHandler.reset(new QFbVtHandler); if (!qEnvironmentVariableIntValue("QT_QPA_FB_DISABLE_INPUT")) createInputHandlers(); }
QT_BEGIN_NAMESPACE QLinuxFbIntegration::QLinuxFbIntegration(const QStringList ¶mList) : m_primaryScreen(nullptr), m_fontDb(new QGenericUnixFontDatabase), m_services(new QGenericUnixServices) { #if QT_CONFIG(kms) if (qEnvironmentVariableIntValue("QT_QPA_FB_DRM") != 0) m_primaryScreen = new QLinuxFbDrmScreen(paramList); #endif if (!m_primaryScreen) m_primaryScreen = new QLinuxFbScreen(paramList); }
QT_BEGIN_NAMESPACE QEglFSIntegration::QEglFSIntegration() : m_display(EGL_NO_DISPLAY), m_inputContext(0), m_fontDb(new QGenericUnixFontDatabase), m_services(new QGenericUnixServices), m_kbdMgr(0), m_disableInputHandlers(false) { m_disableInputHandlers = qEnvironmentVariableIntValue("QT_QPA_EGLFS_DISABLE_INPUT"); initResources(); }
QVariant QAndroidPlatformTheme::themeHint(ThemeHint hint) const { switch (hint) { case StyleNames: if (qEnvironmentVariableIntValue("QT_USE_ANDROID_NATIVE_STYLE") && m_androidStyleData) { return QStringList("android"); } return QStringList("fusion"); case MouseDoubleClickDistance: { int minimumDistance = qEnvironmentVariableIntValue("QT_ANDROID_MINIMUM_MOUSE_DOUBLE_CLICK_DISTANCE"); int ret = minimumDistance; QAndroidPlatformIntegration *platformIntegration = static_cast<QAndroidPlatformIntegration *>(QGuiApplicationPrivate::platformIntegration()); QAndroidPlatformScreen *platformScreen = platformIntegration->screen(); if (platformScreen != 0) { QScreen *screen = platformScreen->screen(); qreal dotsPerInch = screen->physicalDotsPerInch(); // Allow 15% of an inch between clicks when double clicking int distance = qRound(dotsPerInch * 0.15); if (distance > minimumDistance) ret = distance; } if (ret > 0) return ret; // fall through } default: return QPlatformTheme::themeHint(hint); } }
void ClipboardClient::start(const QStringList &arguments) { QScriptEngine engine; ScriptableProxy scriptableProxy(nullptr, nullptr); Scriptable scriptable(&engine, &scriptableProxy); const auto serverName = clipboardServerName(); ClientSocket socket(serverName); connect( &socket, &ClientSocket::messageReceived, this, &ClipboardClient::onMessageReceived ); connect( &socket, &ClientSocket::disconnected, this, &ClipboardClient::onDisconnected ); connect( &socket, &ClientSocket::connectionFailed, this, &ClipboardClient::onConnectionFailed ); connect( &scriptableProxy, &ScriptableProxy::sendMessage, &socket, &ClientSocket::sendMessage ); connect( this, &ClipboardClient::functionCallResultReceived, &scriptableProxy, &ScriptableProxy::setFunctionCallReturnValue ); connect( this, &ClipboardClient::inputDialogFinished, &scriptableProxy, &ScriptableProxy::setInputDialogResult ); connect( &socket, &ClientSocket::disconnected, &scriptable, &Scriptable::abort ); connect( &socket, &ClientSocket::disconnected, &scriptableProxy, &ScriptableProxy::clientDisconnected ); connect( &scriptable, &Scriptable::finished, &scriptableProxy, &ScriptableProxy::clientDisconnected ); bool hasActionId; #if QT_VERSION < QT_VERSION_CHECK(5,5,0) auto actionId = qgetenv("COPYQ_ACTION_ID").toInt(&hasActionId); #else auto actionId = qEnvironmentVariableIntValue("COPYQ_ACTION_ID", &hasActionId); #endif const auto actionName = getTextData( qgetenv("COPYQ_ACTION_NAME") ); if ( socket.start() ) { if (hasActionId) scriptable.setActionId(actionId); scriptable.setActionName(actionName); const int exitCode = scriptable.executeArguments(arguments); exit(exitCode); } }
void QLinuxFbIntegration::createInputHandlers() { #if QT_CONFIG(libinput) if (!qEnvironmentVariableIntValue("QT_QPA_FB_NO_LIBINPUT")) { new QLibInputHandler(QLatin1String("libinput"), QString()); return; } #endif #if QT_CONFIG(tslib) bool useTslib = qEnvironmentVariableIntValue("QT_QPA_FB_TSLIB"); if (useTslib) new QTsLibMouseHandler(QLatin1String("TsLib"), QString()); #endif #if QT_CONFIG(evdev) new QEvdevKeyboardManager(QLatin1String("EvdevKeyboard"), QString(), this); new QEvdevMouseManager(QLatin1String("EvdevMouse"), QString(), this); #if QT_CONFIG(tslib) if (!useTslib) #endif new QEvdevTouchManager(QLatin1String("EvdevTouch"), QString() /* spec */, this); #endif }
void QEglFSKmsEglDeviceScreen::waitForFlip() { QKmsOutput &op(output()); const int fd = device()->fd(); const uint32_t w = op.modes[op.mode].hdisplay; const uint32_t h = op.modes[op.mode].vdisplay; if (!op.mode_set) { op.mode_set = true; drmModeCrtcPtr currentMode = drmModeGetCrtc(fd, op.crtc_id); const bool alreadySet = currentMode && currentMode->width == w && currentMode->height == h; if (currentMode) drmModeFreeCrtc(currentMode); if (alreadySet) { // Maybe detecting the DPMS mode could help here, but there are no properties // exposed on the connector apparently. So rely on an env var for now. static bool alwaysDoSet = qEnvironmentVariableIntValue("QT_QPA_EGLFS_ALWAYS_SET_MODE"); if (!alwaysDoSet) { qCDebug(qLcEglfsKmsDebug, "Mode already set"); return; } } qCDebug(qLcEglfsKmsDebug, "Setting mode"); int ret = drmModeSetCrtc(fd, op.crtc_id, uint32_t(-1), 0, 0, &op.connector_id, 1, &op.modes[op.mode]); if (ret) qErrnoWarning(errno, "drmModeSetCrtc failed"); } if (!op.plane_set) { op.plane_set = true; if (op.wants_plane) { qCDebug(qLcEglfsKmsDebug, "Setting plane %u", op.plane_id); int ret = drmModeSetPlane(fd, op.plane_id, op.crtc_id, uint32_t(-1), 0, 0, 0, w, h, 0 << 16, 0 << 16, w << 16, h << 16); if (ret == -1) qErrnoWarning(errno, "drmModeSetPlane failed"); } } }
bool QAndroidPlatformTheme::usePlatformNativeDialog(QPlatformTheme::DialogType type) const { if (type == MessageDialog) return qEnvironmentVariableIntValue("QT_USE_ANDROID_NATIVE_DIALOGS") == 1; return false; }
void QEglFSKmsEglDeviceWindow::resetSurface() { qCDebug(qLcEglfsKmsDebug, "Creating stream"); EGLDisplay display = screen()->display(); EGLint streamAttribs[3]; int streamAttribCount = 0; int fifoLength = qEnvironmentVariableIntValue("QT_QPA_EGLFS_STREAM_FIFO_LENGTH"); if (fifoLength > 0) { streamAttribs[streamAttribCount++] = EGL_STREAM_FIFO_LENGTH_KHR; streamAttribs[streamAttribCount++] = fifoLength; } streamAttribs[streamAttribCount++] = EGL_NONE; m_egl_stream = m_integration->m_funcs->create_stream(display, streamAttribs); if (m_egl_stream == EGL_NO_STREAM_KHR) { qWarning("resetSurface: Couldn't create EGLStream for native window"); return; } qCDebug(qLcEglfsKmsDebug, "Created stream %p on display %p", m_egl_stream, display); EGLint count; if (m_integration->m_funcs->query_stream(display, m_egl_stream, EGL_STREAM_FIFO_LENGTH_KHR, &count)) { if (count > 0) qCDebug(qLcEglfsKmsDebug, "Using EGLStream FIFO mode with %d frames", count); else qCDebug(qLcEglfsKmsDebug, "Using EGLStream mailbox mode"); } else { qCDebug(qLcEglfsKmsDebug, "Could not query number of EGLStream FIFO frames"); } if (!m_integration->m_funcs->get_output_layers(display, Q_NULLPTR, Q_NULLPTR, 0, &count) || count == 0) { qWarning("No output layers found"); return; } qCDebug(qLcEglfsKmsDebug, "Output has %d layers", count); QVector<EGLOutputLayerEXT> layers; layers.resize(count); EGLint actualCount; if (!m_integration->m_funcs->get_output_layers(display, Q_NULLPTR, layers.data(), count, &actualCount)) { qWarning("Failed to get layers"); return; } QEglFSKmsEglDeviceScreen *cur_screen = static_cast<QEglFSKmsEglDeviceScreen *>(screen()); Q_ASSERT(cur_screen); QKmsOutput &output(cur_screen->output()); const uint32_t wantedId = !output.wants_plane ? output.crtc_id : output.plane_id; qCDebug(qLcEglfsKmsDebug, "Searching for id: %d", wantedId); EGLOutputLayerEXT layer = EGL_NO_OUTPUT_LAYER_EXT; for (int i = 0; i < actualCount; ++i) { EGLAttrib id; if (m_integration->m_funcs->query_output_layer_attrib(display, layers[i], EGL_DRM_CRTC_EXT, &id)) { qCDebug(qLcEglfsKmsDebug, " [%d] layer %p - crtc %d", i, layers[i], (int) id); if (id == EGLAttrib(wantedId)) layer = layers[i]; } else if (m_integration->m_funcs->query_output_layer_attrib(display, layers[i], EGL_DRM_PLANE_EXT, &id)) { qCDebug(qLcEglfsKmsDebug, " [%d] layer %p - plane %d", i, layers[i], (int) id); if (id == EGLAttrib(wantedId)) layer = layers[i]; } else { qCDebug(qLcEglfsKmsDebug, " [%d] layer %p - unknown", i, layers[i]); } } QByteArray reqLayerIndex = qgetenv("QT_QPA_EGLFS_LAYER_INDEX"); if (!reqLayerIndex.isEmpty()) { int idx = reqLayerIndex.toInt(); if (idx >= 0 && idx < layers.count()) { qCDebug(qLcEglfsKmsDebug, "EGLOutput layer index override = %d", idx); layer = layers[idx]; } } if (layer == EGL_NO_OUTPUT_LAYER_EXT) { qWarning("resetSurface: Couldn't get EGLOutputLayer for native window"); return; } qCDebug(qLcEglfsKmsDebug, "Using layer %p", layer); if (!m_integration->m_funcs->stream_consumer_output(display, m_egl_stream, layer)) qWarning("resetSurface: Unable to connect stream"); m_config = QEglFSDeviceIntegration::chooseConfig(display, m_integration->surfaceFormatFor(window()->requestedFormat())); m_format = q_glFormatFromConfig(display, m_config); qCDebug(qLcEglfsKmsDebug) << "Stream producer format is" << m_format; const int w = cur_screen->rawGeometry().width(); const int h = cur_screen->rawGeometry().height(); qCDebug(qLcEglfsKmsDebug, "Creating stream producer surface of size %dx%d", w, h); const EGLint stream_producer_attribs[] = { EGL_WIDTH, w, EGL_HEIGHT, h, EGL_NONE }; m_surface = m_integration->m_funcs->create_stream_producer_surface(display, m_config, m_egl_stream, stream_producer_attribs); if (m_surface == EGL_NO_SURFACE) return; qCDebug(qLcEglfsKmsDebug, "Created stream producer surface %p", m_surface); }
#include <QAuthenticator> #include "networkjobs.h" #include "account.h" #include "owncloudpropagator.h" #include "creds/abstractcredentials.h" Q_DECLARE_METATYPE(QTimer *) namespace OCC { Q_LOGGING_CATEGORY(lcNetworkJob, "sync.networkjob", QtInfoMsg) // If not set, it is overwritten by the Application constructor with the value from the config int AbstractNetworkJob::httpTimeout = qEnvironmentVariableIntValue("OWNCLOUD_TIMEOUT"); AbstractNetworkJob::AbstractNetworkJob(AccountPtr account, const QString &path, QObject *parent) : QObject(parent) , _timedout(false) , _followRedirects(true) , _account(account) , _ignoreCredentialFailure(false) , _reply(0) , _path(path) , _redirectCount(0) { _timer.setSingleShot(true); _timer.setInterval((httpTimeout ? httpTimeout : 300) * 1000); // default to 5 minutes. connect(&_timer, &QTimer::timeout, this, &AbstractNetworkJob::slotTimeout);
void QEGLPlatformContext::init(const QSurfaceFormat &format, QPlatformOpenGLContext *share) { m_format = q_glFormatFromConfig(m_eglDisplay, m_eglConfig); // m_format now has the renderableType() resolved (it cannot be Default anymore) // but does not yet contain version, profile, options. m_shareContext = share ? static_cast<QEGLPlatformContext *>(share)->m_eglContext : 0; QVector<EGLint> contextAttrs; contextAttrs.append(EGL_CONTEXT_CLIENT_VERSION); contextAttrs.append(format.majorVersion()); const bool hasKHRCreateContext = q_hasEglExtension(m_eglDisplay, "EGL_KHR_create_context"); if (hasKHRCreateContext) { contextAttrs.append(EGL_CONTEXT_MINOR_VERSION_KHR); contextAttrs.append(format.minorVersion()); int flags = 0; // The debug bit is supported both for OpenGL and OpenGL ES. if (format.testOption(QSurfaceFormat::DebugContext)) flags |= EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR; // The fwdcompat bit is only for OpenGL 3.0+. if (m_format.renderableType() == QSurfaceFormat::OpenGL && format.majorVersion() >= 3 && !format.testOption(QSurfaceFormat::DeprecatedFunctions)) flags |= EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR; if (flags) { contextAttrs.append(EGL_CONTEXT_FLAGS_KHR); contextAttrs.append(flags); } // Profiles are OpenGL only and mandatory in 3.2+. The value is silently ignored for < 3.2. if (m_format.renderableType() == QSurfaceFormat::OpenGL) { contextAttrs.append(EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR); contextAttrs.append(format.profile() == QSurfaceFormat::CoreProfile ? EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT_KHR : EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT_KHR); } } contextAttrs.append(EGL_NONE); switch (m_format.renderableType()) { case QSurfaceFormat::OpenVG: m_api = EGL_OPENVG_API; break; #ifdef EGL_VERSION_1_4 case QSurfaceFormat::OpenGL: m_api = EGL_OPENGL_API; break; #endif // EGL_VERSION_1_4 default: m_api = EGL_OPENGL_ES_API; break; } eglBindAPI(m_api); m_eglContext = eglCreateContext(m_eglDisplay, m_eglConfig, m_shareContext, contextAttrs.constData()); if (m_eglContext == EGL_NO_CONTEXT && m_shareContext != EGL_NO_CONTEXT) { m_shareContext = 0; m_eglContext = eglCreateContext(m_eglDisplay, m_eglConfig, 0, contextAttrs.constData()); } if (m_eglContext == EGL_NO_CONTEXT) { qWarning("QEGLPlatformContext: Failed to create context: %x", eglGetError()); return; } static const bool printConfig = qEnvironmentVariableIntValue("QT_QPA_EGLFS_DEBUG"); if (printConfig) { qDebug() << "Created context for format" << format << "with config:"; q_printEglConfig(m_eglDisplay, m_eglConfig); } // Cannot just call updateFormatFromGL() since it relies on virtuals. Defer it to initialize(). }