From 2b8eaa3350250bb7afc5105aba2da51685aaed88 Mon Sep 17 00:00:00 2001 From: Mike Krus Date: Mon, 3 Aug 2020 17:44:59 +0100 Subject: Handle backend type based on QtQuick settings By default, Scene3D will select the RHI backend. If QQuickWindow::graphicsApi() is set to QSGRendererInterface::OpenGLRhi (QSG_RHI_BACKEND set to "opengl") then Qt3D will select the OpenGL backend. It's possible to use the OpenGL backend to RHI by setting QQuickWindow::graphicsApi() to QSGRendererInterface::OpenGLRhi AND setting QT3D_RENDERER to "rhi". (Note that setting to QSGRendererInterface::OpenGL has not effect). Change-Id: I71488ddb290ce2e30c724ddcc10c57ed8afe267b Reviewed-by: Paul Lemire --- examples/qt3d/scene3d/AnimatedEntity.qml | 1 + examples/qt3d/scene3d/CMakeLists.txt | 1 + examples/qt3d/scene3d/main.cpp | 1 - src/quick3d/imports/scene3d/scene3ditem.cpp | 4 ++++ 4 files changed, 6 insertions(+), 1 deletion(-) diff --git a/examples/qt3d/scene3d/AnimatedEntity.qml b/examples/qt3d/scene3d/AnimatedEntity.qml index 02e1148e2..4c7f700cf 100644 --- a/examples/qt3d/scene3d/AnimatedEntity.qml +++ b/examples/qt3d/scene3d/AnimatedEntity.qml @@ -115,6 +115,7 @@ Entity { SphereMesh { id: sphereMesh radius: 3 + generateTangents: true } Transform { diff --git a/examples/qt3d/scene3d/CMakeLists.txt b/examples/qt3d/scene3d/CMakeLists.txt index 675bb53b1..9efb25713 100644 --- a/examples/qt3d/scene3d/CMakeLists.txt +++ b/examples/qt3d/scene3d/CMakeLists.txt @@ -40,6 +40,7 @@ qt6_add_resources(scene3d "scene3d" FILES ${scene3d_resource_files} ) +target_sources(scene3d PRIVATE ${scene3d_resource_files}) install(TARGETS scene3d RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}" diff --git a/examples/qt3d/scene3d/main.cpp b/examples/qt3d/scene3d/main.cpp index 11d07c024..f4f01a7ea 100644 --- a/examples/qt3d/scene3d/main.cpp +++ b/examples/qt3d/scene3d/main.cpp @@ -70,7 +70,6 @@ int main(int argc, char **argv) QGuiApplication app(argc, argv); // Force OpenGL backend - QQuickWindow::setGraphicsApi(QSGRendererInterface::OpenGLRhi); QQuickView view; view.resize(1024, 768); diff --git a/src/quick3d/imports/scene3d/scene3ditem.cpp b/src/quick3d/imports/scene3d/scene3ditem.cpp index 1932cd155..3bafcf3ce 100644 --- a/src/quick3d/imports/scene3d/scene3ditem.cpp +++ b/src/quick3d/imports/scene3d/scene3ditem.cpp @@ -717,6 +717,10 @@ QSGNode *Scene3DItem::updatePaintNode(QSGNode *node, QQuickItem::UpdatePaintNode // If the render aspect wasn't created yet, do so now if (m_renderAspect == nullptr) { m_renderAspect = new QRenderAspect(QRenderAspect::Manual); + QSGRendererInterface::GraphicsApi windowApi = window()->rendererInterface()->graphicsApi(); + // Requested API of OpenGLRhi implies OpenGL renderer + if (windowApi != QSGRendererInterface::OpenGLRhi && qgetenv("QT3D_RENDERER").isEmpty()) + qputenv("QT3D_RENDERER", "rhi"); // else Qt3D still defaults to OpenGL auto *rw = QQuickRenderControl::renderWindowFor(window()); static_cast(Qt3DRender::QRenderAspectPrivate::get(m_renderAspect))->m_screen = (rw ? rw->screen() : window()->screen()); -- cgit v1.2.3