summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt2
-rw-r--r--examples/qt3d/advancedcustommaterial/CMakeLists.txt2
-rw-r--r--examples/qt3d/advancedcustommaterial/main.cpp5
-rw-r--r--examples/qt3d/compute-particles/main.cpp5
-rw-r--r--examples/qt3d/controls/CMakeLists.txt2
-rw-r--r--examples/qt3d/controls/main.cpp4
-rw-r--r--examples/qt3d/controlsunderlay/CMakeLists.txt2
-rw-r--r--examples/qt3d/controlsunderlay/main.cpp4
-rw-r--r--examples/qt3d/planets-qml/main.cpp5
-rw-r--r--examples/qt3d/scene3d/CMakeLists.txt2
-rw-r--r--examples/qt3d/scene3d/main.cpp8
-rw-r--r--examples/qt3d/simplecustommaterial/CMakeLists.txt2
-rw-r--r--examples/qt3d/simplecustommaterial/main.cpp5
-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
18 files changed, 71 insertions, 7 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 69087ff96..7714f9926 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -13,7 +13,7 @@ project(Qt3D # special case
# special case begin
find_package(Qt6 ${PROJECT_VERSION} CONFIG REQUIRED COMPONENTS BuildInternals Core)
find_package(Qt6 ${PROJECT_VERSION} QUIET CONFIG OPTIONAL_COMPONENTS
- Concurrent Widgets Qml Quick Gamepad OpenGL ShaderTools Multimedia)
+ Concurrent Widgets Qml Quick Gamepad OpenGL Multimedia)
# special case end
if(NOT TARGET Qt::Gui)
diff --git a/examples/qt3d/advancedcustommaterial/CMakeLists.txt b/examples/qt3d/advancedcustommaterial/CMakeLists.txt
index b06ec23a9..8bb9b6d1c 100644
--- a/examples/qt3d/advancedcustommaterial/CMakeLists.txt
+++ b/examples/qt3d/advancedcustommaterial/CMakeLists.txt
@@ -19,6 +19,7 @@ find_package(Qt6 COMPONENTS Core)
find_package(Qt6 COMPONENTS Gui)
find_package(Qt6 COMPONENTS Qml)
find_package(Qt6 COMPONENTS Quick)
+find_package(Qt6 COMPONENTS 3DRender)
qt_add_executable(advancedcustommaterial
main.cpp
@@ -32,6 +33,7 @@ target_link_libraries(advancedcustommaterial PUBLIC
Qt::Gui
Qt::Qml
Qt::Quick
+ Qt::3DRender
)
diff --git a/examples/qt3d/advancedcustommaterial/main.cpp b/examples/qt3d/advancedcustommaterial/main.cpp
index eef254063..f402f4628 100644
--- a/examples/qt3d/advancedcustommaterial/main.cpp
+++ b/examples/qt3d/advancedcustommaterial/main.cpp
@@ -51,6 +51,7 @@
#include <QGuiApplication>
#include <QQuickView>
#include <QOpenGLContext>
+#include <Qt3DRender/qt3drender-config.h>
void setSurfaceFormat()
{
@@ -67,6 +68,10 @@ void setSurfaceFormat()
format.setSamples(4);
format.setStencilBufferSize(8);
QSurfaceFormat::setDefaultFormat(format);
+
+#if !QT_CONFIG(qt3d_rhi_renderer)
+ qputenv("QSG_RHI_BACKEND", "opengl");
+#endif
}
int main(int argc, char **argv)
diff --git a/examples/qt3d/compute-particles/main.cpp b/examples/qt3d/compute-particles/main.cpp
index 66cd82ff9..ad6e563ea 100644
--- a/examples/qt3d/compute-particles/main.cpp
+++ b/examples/qt3d/compute-particles/main.cpp
@@ -50,11 +50,16 @@
#include <QGuiApplication>
#include <QQuickView>
+#include <Qt3DRender/qt3drender-config.h>
int main(int argc, char* argv[])
{
QGuiApplication app(argc, argv);
+#if !QT_CONFIG(qt3d_rhi_renderer)
+ qputenv("QSG_RHI_BACKEND", "opengl");
+#endif
+
QQuickView view;
view.resize(500, 500);
diff --git a/examples/qt3d/controls/CMakeLists.txt b/examples/qt3d/controls/CMakeLists.txt
index 07550ab21..f7c8ba115 100644
--- a/examples/qt3d/controls/CMakeLists.txt
+++ b/examples/qt3d/controls/CMakeLists.txt
@@ -19,6 +19,7 @@ find_package(Qt6 COMPONENTS Core)
find_package(Qt6 COMPONENTS Gui)
find_package(Qt6 COMPONENTS Qml)
find_package(Qt6 COMPONENTS Quick)
+find_package(Qt6 COMPONENTS 3DRender)
qt_add_executable(controls
main.cpp
@@ -32,6 +33,7 @@ target_link_libraries(controls PUBLIC
Qt::Gui
Qt::Qml
Qt::Quick
+ Qt::3DRender
)
diff --git a/examples/qt3d/controls/main.cpp b/examples/qt3d/controls/main.cpp
index b5e448538..d2cca5bb5 100644
--- a/examples/qt3d/controls/main.cpp
+++ b/examples/qt3d/controls/main.cpp
@@ -50,10 +50,14 @@
#include <QGuiApplication>
#include <QQuickView>
+#include <Qt3DRender/qt3drender-config.h>
int main(int argc, char **argv)
{
QGuiApplication app(argc, argv);
+#if !QT_CONFIG(qt3d_rhi_renderer)
+ qputenv("QSG_RHI_BACKEND", "opengl");
+#endif
QQuickView view;
diff --git a/examples/qt3d/controlsunderlay/CMakeLists.txt b/examples/qt3d/controlsunderlay/CMakeLists.txt
index 1b65bc755..4bd5f086e 100644
--- a/examples/qt3d/controlsunderlay/CMakeLists.txt
+++ b/examples/qt3d/controlsunderlay/CMakeLists.txt
@@ -19,6 +19,7 @@ find_package(Qt6 COMPONENTS Core)
find_package(Qt6 COMPONENTS Gui)
find_package(Qt6 COMPONENTS Qml)
find_package(Qt6 COMPONENTS Quick)
+find_package(Qt6 COMPONENTS 3DRender)
qt_add_executable(controlsunderlay
main.cpp
@@ -32,6 +33,7 @@ target_link_libraries(controlsunderlay PUBLIC
Qt::Gui
Qt::Qml
Qt::Quick
+ Qt::3DRender
)
diff --git a/examples/qt3d/controlsunderlay/main.cpp b/examples/qt3d/controlsunderlay/main.cpp
index cb3928a51..a19464911 100644
--- a/examples/qt3d/controlsunderlay/main.cpp
+++ b/examples/qt3d/controlsunderlay/main.cpp
@@ -50,12 +50,16 @@
#include <QGuiApplication>
#include <QQuickView>
+#include <Qt3DRender/qt3drender-config.h>
int main(int argc, char **argv)
{
QSurfaceFormat format;
format.setSamples(4);
QSurfaceFormat::setDefaultFormat(format);
+#if !QT_CONFIG(qt3d_rhi_renderer)
+ qputenv("QSG_RHI_BACKEND", "opengl");
+#endif
QGuiApplication app(argc, argv);
diff --git a/examples/qt3d/planets-qml/main.cpp b/examples/qt3d/planets-qml/main.cpp
index 32fca3136..da1335f80 100644
--- a/examples/qt3d/planets-qml/main.cpp
+++ b/examples/qt3d/planets-qml/main.cpp
@@ -52,6 +52,8 @@
#include <QQuickView>
#include <QQmlContext>
#include <QOpenGLContext>
+#include <Qt3DRender/qt3drender-config.h>
+
#include "networkcontroller.h"
int main(int argc, char **argv)
@@ -66,6 +68,9 @@ int main(int argc, char **argv)
format.setDepthBufferSize(24);
format.setStencilBufferSize(8);
format.setSamples(4);
+#if !QT_CONFIG(qt3d_rhi_renderer)
+ qputenv("QSG_RHI_BACKEND", "opengl");
+#endif
NetworkController networkController;
diff --git a/examples/qt3d/scene3d/CMakeLists.txt b/examples/qt3d/scene3d/CMakeLists.txt
index baefd34d5..5afe7b3d3 100644
--- a/examples/qt3d/scene3d/CMakeLists.txt
+++ b/examples/qt3d/scene3d/CMakeLists.txt
@@ -20,6 +20,7 @@ find_package(Qt6 COMPONENTS Gui)
find_package(Qt6 COMPONENTS Qml)
find_package(Qt6 COMPONENTS Quick)
find_package(Qt6 COMPONENTS 3DInput)
+find_package(Qt6 COMPONENTS 3DRender)
qt_add_executable(scene3d
main.cpp
@@ -30,6 +31,7 @@ set_target_properties(scene3d PROPERTIES
)
target_link_libraries(scene3d PUBLIC
Qt::3DInput
+ Qt::3DRender
Qt::Core
Qt::Gui
Qt::Qml
diff --git a/examples/qt3d/scene3d/main.cpp b/examples/qt3d/scene3d/main.cpp
index f4f01a7ea..23be5e2c0 100644
--- a/examples/qt3d/scene3d/main.cpp
+++ b/examples/qt3d/scene3d/main.cpp
@@ -51,6 +51,9 @@
#include <QGuiApplication>
#include <QQuickView>
+#include <Qt3DRender/qt3drender-config.h>
+
+
int main(int argc, char **argv)
{
{
@@ -67,6 +70,11 @@ int main(int argc, char **argv)
#endif
QSurfaceFormat::setDefaultFormat(format);
}
+
+#if !QT_CONFIG(qt3d_rhi_renderer)
+ qputenv("QSG_RHI_BACKEND", "opengl");
+#endif
+
QGuiApplication app(argc, argv);
// Force OpenGL backend
diff --git a/examples/qt3d/simplecustommaterial/CMakeLists.txt b/examples/qt3d/simplecustommaterial/CMakeLists.txt
index 0cf3c886f..590977956 100644
--- a/examples/qt3d/simplecustommaterial/CMakeLists.txt
+++ b/examples/qt3d/simplecustommaterial/CMakeLists.txt
@@ -19,6 +19,7 @@ find_package(Qt6 COMPONENTS Core)
find_package(Qt6 COMPONENTS Gui)
find_package(Qt6 COMPONENTS Qml)
find_package(Qt6 COMPONENTS Quick)
+find_package(Qt6 COMPONENTS 3DRender)
qt_add_executable(simplecustommaterial
main.cpp
@@ -32,6 +33,7 @@ target_link_libraries(simplecustommaterial PUBLIC
Qt::Gui
Qt::Qml
Qt::Quick
+ Qt::3DRender
)
diff --git a/examples/qt3d/simplecustommaterial/main.cpp b/examples/qt3d/simplecustommaterial/main.cpp
index da299e913..beb00b7b3 100644
--- a/examples/qt3d/simplecustommaterial/main.cpp
+++ b/examples/qt3d/simplecustommaterial/main.cpp
@@ -51,6 +51,7 @@
#include <QGuiApplication>
#include <QQuickView>
#include <QOpenGLContext>
+#include <Qt3DRender/qt3drender-config.h>
void setSurfaceFormat()
{
@@ -67,6 +68,10 @@ void setSurfaceFormat()
format.setSamples(4);
format.setStencilBufferSize(8);
QSurfaceFormat::setDefaultFormat(format);
+
+#if !QT_CONFIG(qt3d_rhi_renderer)
+ qputenv("QSG_RHI_BACKEND", "opengl");
+#endif
}
int main(int argc, char **argv)
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"