Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qquick3dxrmanager_visionos_p.h
Go to the documentation of this file.
1// Copyright (C) 2024 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
3// Qt-Security score:significant reason:default
4
5
6#ifndef QQUICK3DXRVISIONOSRENDERMANAGER_P_H
7#define QQUICK3DXRVISIONOSRENDERMANAGER_P_H
8
9#include <QtQuick3DXr/private/qtquick3dxrglobal_p.h>
10#include <QObject>
11#import <CompositorServices/CompositorServices.h>
12#import <Spatial/Spatial.h>
13#import <ARKit/ARKit.h>
14
15//
16// W A R N I N G
17// -------------
18//
19// This file is not part of the Qt API. It exists purely as an
20// implementation detail. This header file may change from version to
21// version without notice, or even be removed.
22//
23// We mean it.
24//
25
26QT_BEGIN_NAMESPACE
27
28class QQuickWindow;
29class QQuick3DXrOrigin;
31class QQuick3DViewport;
34
35class QQuickRenderControl;
36class QQuick3DXrAnimationDriver;
37class QRhiTexture;
38class QRhiShadingRateMap;
39class QRhiRenderPassDescriptor;
40
41class CompositorLayer;
42
43class QMutex;
44template <typename T>
45class QMutexLocker;
46
48{
49 Q_DECLARE_PUBLIC(QQuick3DXrManager)
50public:
57
65
68
70
71 bool initialize();
72 bool finalizeGraphics(QRhi *rhi);
73 bool isReady() const;
74
76 bool setupGraphics(QQuickWindow *window);
77
78 void setupWindow(QQuickWindow *window);
79
80 void teardown();
81
84
85 bool setPassthroughEnabled(bool enable);
86 bool isPassthroughEnabled() const { return false; }
87 bool supportsPassthrough() const { return false; }
88
90 void setReferenceSpace(QtQuick3DXr::ReferenceSpace newReferenceSpace);
91
92 void setDepthSubmissionEnabled(bool enable);
93 bool isDepthSubmissionEnabled() const { return true; }
94
95 [[nodiscard]] bool isValid() const { return true; }
96
97 void getDefaultClipDistances(float &nearClip, float &farClip) const;
98
99 void update();
101
102 void processSpatialEvents(const QJsonObject &events);
103
104 void setSamples(int samples);
105
106 QStringList enabledExtensions() const { return {}; }
109
111
112 void doRenderFrame() { /* Unused */ }
113
116
117private:
118 friend class CompositorLayer;
119
120 static void prepareAnchorManager(QQuick3DXrAnchorManager *anchorManager, ar_data_providers_t dataProviders);
121 static void initAnchorManager(QQuick3DXrAnchorManager *anchorManager);
122 static void initInputManager(QQuick3DXrInputManager *im);
123 [[nodiscard]] bool renderFrameImpl(QMutexLocker<QMutex> &locker, QWaitCondition &waitCondition);
124
125 static void updateCameraImp(simd_float4x4 headTransform, cp_drawable_t drawable, QQuick3DXrOrigin *xrOrigin, int i);
126 static void updateCamera(QQuick3DViewport *xrViewport, simd_float4x4 headTransform, cp_drawable_t drawable, QQuick3DXrOrigin *xrOrigin, int i);
127 static void updateCameraMultiview(QQuick3DViewport *xrViewport, simd_float4x4 headTransform, cp_drawable_t drawable, QQuick3DXrOrigin *xrOrigin);
128
129 void setupShadingRateMap(QQuickWindow *window, QRhiShadingRateMap *srm);
130 // Called from the render thread
131 void releaseResources();
132
133 QQuick3DXrManager *q_ptr = nullptr;
134 CompositorLayer *m_compositorLayer = nullptr;
135 QRhiTexture *m_rhiDepthTexture = nullptr;
136 std::array<QRhiShadingRateMap *, 2> m_srm { nullptr, nullptr };
137 QRhiRenderPassDescriptor *m_srmRenderPassDesc = nullptr;
138 QThread *m_renderThread = nullptr;
139 QPointer<QQuick3DXrInputManager> m_inputManager;
140 QPointer<QQuick3DXrAnchorManager> m_anchorManager;
141 qint64 m_previousTime = 0;
142 qint64 m_nextStepSize = 0;
143 bool m_isGraphicsInitialized = false;
144 bool m_multiviewRenderingEnabled = true;
145 bool m_running = false;
146 bool m_arRunning = false;
147 bool m_syncDone = false;
148};
149
150QT_END_NAMESPACE
151
152#endif // QQUICK3DXRVISIONOSRENDERMANAGER_P_H
void arStateChanged(QQuick3DXrManagerPrivate::ArTrackingState)
void configure(cp_layer_renderer_capabilities_t capabilities, cp_layer_renderer_configuration_t configuration) const override
static constexpr QEvent::Type asQEvent(CompositorLayer::Event event)
friend bool QQuick3DXrManagerPrivate::renderFrameImpl(QMutexLocker< QMutex > &locker, QWaitCondition &waitCondition)
void getDefaultDepthRange(float &near, float &far) const
static Q_INVOKABLE void destroy(QQuick3DXrManagerPrivate *mngr, QQuickWindow *window, CompositorLayer *compositorLayer)
void layerRendererChanged()
static bool supportsLayoutType(cp_layer_renderer_capabilities_t capabilities, cp_layer_renderer_layout layout)
bool event(QEvent *event) override
This virtual function receives events to an object and should return true if the event e was recogniz...
void renderStateChanged(QQuick3DXrManagerPrivate::RenderState)
cp_layer_renderer_t layerRenderer() const
void render(cp_layer_renderer_t renderer) override
void handleSpatialEvents(const QJsonObject &events) override
void init(QQuick3DXrManagerPrivate *xrManager)
\inmodule QtCore
Definition qmutex.h:346
void prepareHandtracking(ar_data_providers_t dataProviders)
static QQuick3DXrInputManagerPrivate * get(QQuick3DXrInputManager *inputManager)
static QQuick3DXrInputManager * instance()
QQuick3DXrManagerPrivate(QQuick3DXrManager &manager)
void setupWindow(QQuickWindow *window)
QtQuick3DXr::ReferenceSpace getReferenceSpace() const
void setReferenceSpace(QtQuick3DXr::ReferenceSpace newReferenceSpace)
bool setupGraphics(QQuickWindow *window)
void processSpatialEvents(const QJsonObject &events)
static QQuick3DXrManagerPrivate * get(QQuick3DXrManager *manager)
void getDefaultClipDistances(float &nearClip, float &farClip) const
static bool isMultiviewRenderingDisabled()
\inmodule QtGuiPrivate \inheaderfile rhi/qrhi.h
Definition qrhi.h:621
Combined button and popup list for selecting options.
static const char s_renderThreadName[]
static bool qssgDisableFoveation()