> On Apr 13, 2022, at 06:52, Sze Howe Koh <szehowe....@gmail.com> wrote: > Apple has let their OpenGL implementation stagnate since 2010 [1]. > They then officially deprecated it in 2018, citing significant > advantages of Metal over OpenGL [2]. They have not revealed when > OpenGL will be removed. > > Most of Qt Quick works well with Metal -- it's only QQuickWidget that > doesn't. In contrast, the graphics API setting affects all of Qt > Quick. Furthermore, QQuickWidget has limitations [3] compared to other > ways of displaying a Qt Quick UI, so it shouldn't be the first choice > unless you really need to mix widgets with Qt Quick. > > Given all this, I don't think it makes sense for Qt to default to > something that can be killed off any day now, just to make it easier > to use QQuickWidget. > > In any case, I think the error message "QQuickWidget is only supported > on OpenGL. Use QQuickWindow::setGraphicsApi() to override the default" > is clear enough as a once-off message for those who want to use > QQuickWidget.
So I finally found time to try and figure out what to do here. This is all rather confusing. I have two different QML modules that are included in my Qt Widget based app. One of them works. It shows maps, not a problem. I get the warning: QQuickWidget is only supported on OpenGL. Use QQuickWindow::setGraphicsApi() to override the default. but it still works just fine. The other one, however, crashes in the software render when I try to instantiate the Widget: Exception Type: EXC_BAD_ACCESS (SIGSEGV) Exception Codes: KERN_INVALID_ADDRESS at 0x0000000000000000 Exception Codes: 0x0000000000000001, 0x0000000000000000 Exception Note: EXC_CORPSE_NOTIFY Termination Reason: Namespace SIGNAL, Code 11 Segmentation fault: 11 Terminating Process: exc handler [80775] VM Region Info: 0 is not in any region. Bytes before following region: 4332961792 REGION TYPE START - END [ VSIZE] PRT/MAX SHRMOD REGION DETAIL UNUSED SPACE AT START ---> __TEXT 10243c000-102aa8000 [ 6576K] r-x/r-x SM=COW ...OS/Subsurface Kernel Triage: VM - Compressor failed a blocking pager_get VM - Compressor failed a blocking pager_get VM - Compressor failed a blocking pager_get Thread 0 Crashed:: Dispatch queue: com.apple.main-thread 0 QtQuick 0x1057423a8 QSGSoftwareRenderableNode::update() + 544 (qsgsoftwarerenderablenode.cpp:187) 1 QtQuick 0x1057423a8 QSGSoftwareRenderableNode::update() + 544 (qsgsoftwarerenderablenode.cpp:187) 2 QtQuick 0x105744a6c bool QSGSoftwareRenderableNodeUpdater::updateRenderableNode<QSGImageNode>(QSGSoftwareRenderableNode::NodeType, QSGImageNode*) + 288 (qsgsoftwarerenderablenodeupdater_p.h:135) 3 QtQuick 0x10577eb24 QSGNodeVisitorEx::visitChildren(QSGNode*) + 108 (qsgadaptationlayer.cpp:355) 4 QtQuick 0x105746008 QSGSoftwareRenderableNodeUpdater::updateNodes(QSGNode*, bool) + 1100 (qsgsoftwarerenderablenodeupdater.cpp:282) 5 QtQuick 0x10573826c QSGAbstractSoftwareRenderer::nodeAdded(QSGNode*) + 124 (qsgabstractsoftwarerenderer.cpp:267) 6 QtQuick 0x105737ee4 QSGAbstractSoftwareRenderer::nodeChanged(QSGNode*, QFlags<QSGNode::DirtyStateBit>) + 164 (qsgabstractsoftwarerenderer.cpp:108) 7 QtQuick 0x105772750 QSGRootNode::notifyNodeChange(QSGNode*, QFlags<QSGNode::DirtyStateBit>) + 44 (qsgnode.cpp:1277) [inlined] 8 QtQuick 0x105772750 QSGNode::markDirty(QFlags<QSGNode::DirtyStateBit>) + 84 (qsgnode.cpp:671) [inlined] 9 QtQuick 0x105772750 QSGNode::appendChildNode(QSGNode*) + 144 (qsgnode.cpp:454) 10 Subsurface 0x10272c2a4 ChartPixmapItem::render(StatsTheme const&) + 172 (chartitem.cpp:71) 11 Subsurface 0x10276006c StatsView::updatePaintNode(QSGNode*, QQuickItem::UpdatePaintNodeData*) + 160 (statsview.cpp:186) Ok, so maybe the software renderer is the problem... after all everyone tells me to use OpenGL QT_QUICK_BACKEND="opengl" ./Subsurface.app/Contents/MacOS/Subsurface -v ... Could not create scene graph context for backend 'opengl' - check that plugins are installed correctly in /Users/hohndel/src/subsurface/build/Subsurface.app/Contents/PlugIns QQuickWidget is only supported on OpenGL. Use QQuickWindow::setGraphicsApi() to override the default. So I'm trying to use the OpenGL backend, but it's unclear how to do that. I looked high and lo for such a plugin. I copied all plugins... nothing. I saw elsewhere that I actually should include the OpenGL component when building like this: find_package(Qt6 COMPONENTS OpenGL) LIST(APPEND SUBSURFACE_LINK_LIBRARIES Qt6::OpenGL) That builds, but immediately crashes on startup without even giving me a stack trace... Any pointers would be welcome. This is right now the major show stopper that prevents me from releasing a first limited Qt6 version of Subsurface (which would give me native m1 support) /D
_______________________________________________ Interest mailing list Interest@qt-project.org https://lists.qt-project.org/listinfo/interest