diff options
-rw-r--r-- | CMakeLists.txt | 2 | ||||
-rw-r--r-- | examples/qt3d/advancedcustommaterial/CMakeLists.txt | 2 | ||||
-rw-r--r-- | examples/qt3d/advancedcustommaterial/main.cpp | 5 | ||||
-rw-r--r-- | examples/qt3d/compute-particles/main.cpp | 5 | ||||
-rw-r--r-- | examples/qt3d/controls/CMakeLists.txt | 2 | ||||
-rw-r--r-- | examples/qt3d/controls/main.cpp | 4 | ||||
-rw-r--r-- | examples/qt3d/controlsunderlay/CMakeLists.txt | 2 | ||||
-rw-r--r-- | examples/qt3d/controlsunderlay/main.cpp | 4 | ||||
-rw-r--r-- | examples/qt3d/planets-qml/main.cpp | 5 | ||||
-rw-r--r-- | examples/qt3d/scene3d/CMakeLists.txt | 2 | ||||
-rw-r--r-- | examples/qt3d/scene3d/main.cpp | 8 | ||||
-rw-r--r-- | examples/qt3d/simplecustommaterial/CMakeLists.txt | 2 | ||||
-rw-r--r-- | examples/qt3d/simplecustommaterial/main.cpp | 5 | ||||
-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 |
18 files changed, 71 insertions, 7 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index e027a2b36..1e125b855 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -19,7 +19,7 @@ set(QT_USE_FIXED_QT_ADD_RESOURCE_BASE TRUE) 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" |