diff options
author | Mike Krus <mike.krus@kdab.com> | 2021-07-10 23:40:45 +0100 |
---|---|---|
committer | Mike Krus <mike.krus@kdab.com> | 2021-07-19 16:14:26 +0100 |
commit | 3964b273459c2999f33d51b96afe6fb68f07d52f (patch) | |
tree | 06b8b71bc2100e5093bd79321b43d6d4e541492a /src | |
parent | 7f1f3c358258331f86dc792c653482c82bbf2ec6 (diff) |
Disable RHI Renderer by default
RHI renderer use ShaderTools which is GPL licensed. This patch
disables the plugin by default until Qt3D provides a suitable
replacement for the dependency.
To enable the RHI backend, compile Qt3D and pass parameter
-DFEATURE_qt3d_rhi_renderer=ON to cmake.
Unfortunate side effect of RHI backend being disabled is that
when using Scene3D, the QtQuick renderer must be configured to
use the opengl backend.
[ChangeLog] RHI Backend is not longer built by default
Task-number: QTBUG-94960
Pick-to: 6.1 6.2
Change-Id: I0bff7523e159b800734b58bfef37e5088d0a0d41
Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/extras/defaults/qt3dwindow.cpp | 5 | ||||
-rw-r--r-- | src/plugins/renderers/CMakeLists.txt | 2 | ||||
-rw-r--r-- | src/plugins/renderers/rhi/CMakeLists.txt | 2 | ||||
-rw-r--r-- | src/quick3d/imports/scene3d/scene3ditem.cpp | 14 | ||||
-rw-r--r-- | src/render/configure.cmake | 7 |
5 files changed, 24 insertions, 6 deletions
diff --git a/src/extras/defaults/qt3dwindow.cpp b/src/extras/defaults/qt3dwindow.cpp index 2798fab17..04a0c5b5a 100644 --- a/src/extras/defaults/qt3dwindow.cpp +++ b/src/extras/defaults/qt3dwindow.cpp @@ -62,6 +62,7 @@ #include <Qt3DLogic/qlogicaspect.h> #include <Qt3DRender/qcamera.h> #include <Qt3DRender/private/vulkaninstance_p.h> +#include <Qt3DRender/qt3drender-config.h> #include <qopenglcontext.h> #include <private/qrendersettings_p.h> @@ -278,13 +279,15 @@ void setupWindowSurface(QWindow *window, Qt3DRender::API api) noexcept // backend is in use will get a valid value. bool useRhi = false; if (qEnvironmentVariableIsEmpty("QT3D_RENDERER")) { -#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) && QT_CONFIG(qt3d_rhi_renderer) qputenv("QT3D_RENDERER", "rhi"); #else qputenv("QT3D_RENDERER", "opengl"); #endif } +#if QT_CONFIG(qt3d_rhi_renderer) useRhi = qEnvironmentVariable("QT3D_RENDERER") == QStringLiteral("rhi"); +#endif if (!useRhi) api = Qt3DRender::API::OpenGL; diff --git a/src/plugins/renderers/CMakeLists.txt b/src/plugins/renderers/CMakeLists.txt index bf6242083..9caeb4153 100644 --- a/src/plugins/renderers/CMakeLists.txt +++ b/src/plugins/renderers/CMakeLists.txt @@ -11,6 +11,6 @@ qt_feature_module_end(NO_MODULE) if(QT_FEATURE_qt3d_opengl_renderer) add_subdirectory(opengl) endif() -if(QT_FEATURE_qt3d_rhi_renderer AND TARGET Qt::ShaderTools) +if(QT_FEATURE_qt3d_rhi_renderer) add_subdirectory(rhi) endif() diff --git a/src/plugins/renderers/rhi/CMakeLists.txt b/src/plugins/renderers/rhi/CMakeLists.txt index 270294ab4..f9664a995 100644 --- a/src/plugins/renderers/rhi/CMakeLists.txt +++ b/src/plugins/renderers/rhi/CMakeLists.txt @@ -36,6 +36,8 @@ if(QT_FEATURE_private_tests) textures ) + find_package(Qt6 REQUIRED COMPONENTS ShaderTools) + target_link_libraries(RhiRendererLib PUBLIC Qt::3DCore diff --git a/src/quick3d/imports/scene3d/scene3ditem.cpp b/src/quick3d/imports/scene3d/scene3ditem.cpp index 5ba3c6a7c..6f84fff7e 100644 --- a/src/quick3d/imports/scene3d/scene3ditem.cpp +++ b/src/quick3d/imports/scene3d/scene3ditem.cpp @@ -68,6 +68,7 @@ #include <Qt3DRender/private/qrendersurfaceselector_p.h> #include <Qt3DRender/private/qrenderaspect_p.h> #include <Qt3DRender/private/rendersettings_p.h> +#include <Qt3DRender/qt3drender-config.h> #include <scene3dlogging_p.h> #include <scene3drenderer_p.h> #include <scene3dsgnode_p.h> @@ -198,7 +199,7 @@ Scene3DItem::Scene3DItem(QQuickItem *parent) setHeight(1); if (qgetenv("QT3D_RENDERER").isEmpty()) { -#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) +#if QT_CONFIG(qt3d_rhi_renderer) qputenv("QT3D_RENDERER", "rhi"); // QtQuick requires RHI #else qputenv("QT3D_RENDERER", "opengl"); // QtQuick requires OpenGL @@ -829,6 +830,17 @@ QSGNode *Scene3DItem::updatePaintNode(QSGNode *node, QQuickItem::UpdatePaintNode auto renderAspectPriv = static_cast<QRenderAspectPrivate*>(QRenderAspectPrivate::get(renderAspect)); renderAspectPriv->m_screen = (rw ? rw->screen() : window()->screen()); updateWindowSurface(); + +#if !QT_CONFIG(qt3d_rhi_renderer) + QSGRendererInterface::GraphicsApi windowApi = window()->rendererInterface()->graphicsApi(); + + if (windowApi != QSGRendererInterface::OpenGLRhi && + windowApi != QSGRendererInterface::OpenGL) { + + qFatal("Qt3D's RHI Renderer is not enabled, please configure RHI to use the OpenGL backend " + "by calling qputenv(\"QSG_RHI_BACKEND\", \"opengl\")"); + } +#endif managerNode->init(); // Note: ChangeArbiter is only set after aspect was registered QObject::connect( diff --git a/src/render/configure.cmake b/src/render/configure.cmake index 6aa29b5d4..9fb7183d9 100644 --- a/src/render/configure.cmake +++ b/src/render/configure.cmake @@ -16,15 +16,16 @@ endif() #### Features -qt_feature("qt3d-opengl-renderer" PRIVATE +qt_feature("qt3d-opengl-renderer" PUBLIC SECTION "Qt 3D Renderers" LABEL "OpenGL Renderer" PURPOSE "Use the OpenGL renderer" ) -qt_feature("qt3d-rhi-renderer" PRIVATE +qt_feature("qt3d-rhi-renderer" PUBLIC SECTION "Qt 3D Renderers" LABEL "RHI Renderer" - PURPOSE "Use the RHI renderer" + PURPOSE "Use the RHI renderer (requires qtShaderTools module)" + AUTODETECT false ) qt_feature("qt3d-vulkan" PUBLIC LABEL "Vulkan" |