diff options
author | Mike Krus <mike.krus@kdab.com> | 2019-11-15 07:15:14 +0000 |
---|---|---|
committer | Mike Krus <mike.krus@kdab.com> | 2019-11-15 07:51:57 +0000 |
commit | c0c87b0de8ea3023f4989ccf852c725e6295ffce (patch) | |
tree | 8dbb0e3fe4554f58515e37f422855b625ea32b93 /src/render/frontend | |
parent | eaa0d0d632f258500d4b0ab9fd2ee3d3f47c1c8a (diff) |
Use builtin test to detect support for threaded GL
Change-Id: Ie14d7ae597ec42e85befed87675388315edc3e6f
Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
Diffstat (limited to 'src/render/frontend')
-rw-r--r-- | src/render/frontend/qrenderaspect.cpp | 60 |
1 files changed, 2 insertions, 58 deletions
diff --git a/src/render/frontend/qrenderaspect.cpp b/src/render/frontend/qrenderaspect.cpp index bc79982ba..5784b35f4 100644 --- a/src/render/frontend/qrenderaspect.cpp +++ b/src/render/frontend/qrenderaspect.cpp @@ -171,52 +171,10 @@ #include <Qt3DCore/private/qservicelocator_p.h> #include <QThread> - -#ifdef Q_OS_MACOS -#include <mach-o/dyld.h> -#include <dlfcn.h> -#endif +#include <QOpenGLContext> QT_BEGIN_NAMESPACE -#ifdef Q_OS_MACOS -namespace { - -// adapted from qcocoahelpers.mm in QtBase -typedef QPair<QOperatingSystemVersion, QOperatingSystemVersion> VersionTuple; - -VersionTuple versionsForImage(const mach_header *machHeader) -{ - static auto makeVersionTuple = [](uint32_t dt, uint32_t sdk) { - return qMakePair( - QOperatingSystemVersion(QOperatingSystemVersion::MacOS, - dt >> 16 & 0xffff, dt >> 8 & 0xff, dt & 0xff), - QOperatingSystemVersion(QOperatingSystemVersion::MacOS, - sdk >> 16 & 0xffff, sdk >> 8 & 0xff, sdk & 0xff) - ); - }; - - auto commandCursor = uintptr_t(machHeader) + sizeof(mach_header_64); - for (uint32_t i = 0; i < machHeader->ncmds; ++i) { - load_command *loadCommand = reinterpret_cast<load_command *>(commandCursor); - if (loadCommand->cmd == LC_VERSION_MIN_MACOSX) { - auto versionCommand = reinterpret_cast<version_min_command *>(loadCommand); - return makeVersionTuple(versionCommand->version, versionCommand->sdk); -#if QT_MACOS_PLATFORM_SDK_EQUAL_OR_ABOVE(__MAC_10_13) - } else if (loadCommand->cmd == LC_BUILD_VERSION) { - auto versionCommand = reinterpret_cast<build_version_command *>(loadCommand); - return makeVersionTuple(versionCommand->minos, versionCommand->sdk); -#endif - } - commandCursor += loadCommand->cmdsize; - } - Q_ASSERT_X(false, "QCocoaIntegration", "Could not find any version load command"); - Q_UNREACHABLE(); -} - -} -#endif - using namespace Qt3DCore; namespace Qt3DRender { @@ -248,24 +206,10 @@ QRenderAspectPrivate::QRenderAspectPrivate(QRenderAspect::RenderType type) { m_instances.append(this); loadSceneParsers(); -#ifdef Q_OS_MACOS - static VersionTuple version = []() { - const mach_header *executableHeader = nullptr; - for (uint32_t i = 0; i < _dyld_image_count(); ++i) { - auto header = _dyld_get_image_header(i); - if (header->filetype == MH_EXECUTE) { - executableHeader = header; - break; - } - } - Q_ASSERT_X(executableHeader, "QCocoaIntegration", "Failed to resolve Mach-O header of executable"); - return versionsForImage(executableHeader); - }(); - if (m_renderType == QRenderAspect::Threaded && version.second >= QOperatingSystemVersion(QOperatingSystemVersion::MacOSMojave)) { + if (m_renderType == QRenderAspect::Threaded && !QOpenGLContext::supportsThreadedOpenGL()) { m_renderType = QRenderAspect::Synchronous; m_renderAfterJobs = true; } -#endif } /*! \internal */ |