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
4#ifndef QQUICK3DXRVISIONOSRENDERMANAGER_P_H
5#define QQUICK3DXRVISIONOSRENDERMANAGER_P_H
6
7#include <QtQuick3DXr/private/qtquick3dxrglobal_p.h>
8#include <QObject>
9#import <CompositorServices/CompositorServices.h>
10#import <Spatial/Spatial.h>
11#import <ARKit/ARKit.h>
12
13//
14// W A R N I N G
15// -------------
16//
17// This file is not part of the Qt API. It exists purely as an
18// implementation detail. This header file may change from version to
19// version without notice, or even be removed.
20//
21// We mean it.
22//
23
24QT_BEGIN_NAMESPACE
25
26class QQuickWindow;
27class QQuick3DXrOrigin;
29class QQuick3DViewport;
32
33class QQuickRenderControl;
34class QQuick3DXrAnimationDriver;
35class QRhiTexture;
36class QRhiShadingRateMap;
37class QRhiRenderPassDescriptor;
38
39class CompositorLayer;
40
41class QMutex;
42template <typename T>
43class QMutexLocker;
44
46{
47 Q_DECLARE_PUBLIC(QQuick3DXrManager)
48public:
55
63
66
68
69 bool initialize();
70 bool finalizeGraphics(QRhi *rhi);
71 bool isReady() const;
72
74 bool setupGraphics(QQuickWindow *window);
75
76 void setupWindow(QQuickWindow *window);
77
78 void teardown();
79
82
83 bool setPassthroughEnabled(bool enable);
84 bool isPassthroughEnabled() const { return false; }
85 bool supportsPassthrough() const { return false; }
86
88 void setReferenceSpace(QtQuick3DXr::ReferenceSpace newReferenceSpace);
89
90 void setDepthSubmissionEnabled(bool enable);
91 bool isDepthSubmissionEnabled() const { return true; }
92
93 [[nodiscard]] bool isValid() const { return true; }
94
95 void getDefaultClipDistances(float &nearClip, float &farClip) const;
96
97 void update();
99
100 void processSpatialEvents(const QJsonObject &events);
101
102 void setSamples(int samples);
103
104 QStringList enabledExtensions() const { return {}; }
107
109
110 void doRenderFrame() { /* Unused */ }
111
114
115private:
116 friend class CompositorLayer;
117
118 static void prepareAnchorManager(QQuick3DXrAnchorManager *anchorManager, ar_data_providers_t dataProviders);
119 static void initAnchorManager(QQuick3DXrAnchorManager *anchorManager);
120 static void initInputManager(QQuick3DXrInputManager *im);
121 [[nodiscard]] bool renderFrameImpl(QMutexLocker<QMutex> &locker, QWaitCondition &waitCondition);
122
123 static void updateCameraImp(simd_float4x4 headTransform, cp_drawable_t drawable, QQuick3DXrOrigin *xrOrigin, int i);
124 static void updateCamera(QQuick3DViewport *xrViewport, simd_float4x4 headTransform, cp_drawable_t drawable, QQuick3DXrOrigin *xrOrigin, int i);
125 static void updateCameraMultiview(QQuick3DViewport *xrViewport, simd_float4x4 headTransform, cp_drawable_t drawable, QQuick3DXrOrigin *xrOrigin);
126
127 void setupShadingRateMap(QQuickWindow *window, QRhiShadingRateMap *srm);
128 // Called from the render thread
129 void releaseResources();
130
131 QQuick3DXrManager *q_ptr = nullptr;
132 CompositorLayer *m_compositorLayer = nullptr;
133 QRhiTexture *m_rhiDepthTexture = nullptr;
134 std::array<QRhiShadingRateMap *, 2> m_srm { nullptr, nullptr };
135 QRhiRenderPassDescriptor *m_srmRenderPassDesc = nullptr;
136 QThread *m_renderThread = nullptr;
137 QPointer<QQuick3DXrInputManager> m_inputManager;
138 QPointer<QQuick3DXrAnchorManager> m_anchorManager;
139 qint64 m_previousTime = 0;
140 qint64 m_nextStepSize = 0;
141 bool m_isGraphicsInitialized = false;
142 bool m_multiviewRenderingEnabled = true;
143 bool m_running = false;
144 bool m_arRunning = false;
145 bool m_syncDone = false;
146};
147
148QT_END_NAMESPACE
149
150#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
static const char s_renderThreadName[]
static bool qssgDisableFoveation()