summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMike Krus <mike.krus@kdab.com>2021-07-10 23:40:45 +0100
committerMike Krus <mike.krus@kdab.com>2021-07-19 16:14:26 +0100
commit3964b273459c2999f33d51b96afe6fb68f07d52f (patch)
tree06b8b71bc2100e5093bd79321b43d6d4e541492a /src
parent7f1f3c358258331f86dc792c653482c82bbf2ec6 (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.cpp5
-rw-r--r--src/plugins/renderers/CMakeLists.txt2
-rw-r--r--src/plugins/renderers/rhi/CMakeLists.txt2
-rw-r--r--src/quick3d/imports/scene3d/scene3ditem.cpp14
-rw-r--r--src/render/configure.cmake7
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"