Ocean
Loading...
Searching...
No Matches
VRNativeApplicationAdvanced.h
Go to the documentation of this file.
1/*
2 * Copyright (c) Meta Platforms, Inc. and affiliates.
3 *
4 * This source code is licensed under the MIT license found in the
5 * LICENSE file in the root directory of this source tree.
6 */
7
8#ifndef META_OCEAN_PLATFORM_META_QUEST_OPENXR_APPLICATION_VR_NATIVE_APPLICATION_ADVANCED_H
9#define META_OCEAN_PLATFORM_META_QUEST_OPENXR_APPLICATION_VR_NATIVE_APPLICATION_ADVANCED_H
10
15
18
20
22
23#include <queue>
24
25namespace Ocean
26{
27
28namespace Platform
29{
30
31namespace Meta
32{
33
34namespace Quest
35{
36
37namespace OpenXR
38{
39
40namespace Application
41{
42
43/**
44 * This class implements an advanced Oculus (VR) application using Ocean's scene graph rendering pipline (Rendering::GLESceneGraph).
45 * In addition to `VRNativeApplication`, this provides the following features
46 * - Controller rendering
47 * - Hand rendering
48 * - Importers for 3D file formats
49 * - Passthrough
50 * @ingroup platformmetaquestopenxrapplication
51 */
52class OCEAN_PLATFORM_META_QUEST_OPENXR_APPLICATION_EXPORT VRNativeApplicationAdvanced : public VRNativeApplication
53{
54 private:
55
56 /**
57 * Definition of a pair holding a 3D model filename and an optional 6-DOF transformation.
58 */
59 using ModelFilenamePair = std::pair<std::string, HomogenousMatrix4>;
60
61 /**
62 * Definition of a queue holding model filename pairs.
63 */
64 using ModelFilenamePairQueue = std::queue<ModelFilenamePair>;
65
66 /**
67 * Definition of a queue holdingfilename.
68 */
69 using ModelFilenameQueue = std::queue<std::string>;
70
71 /**
72 * Definition of a pair combining scene description and rendering scene ids.
73 */
74 using SceneIdPair = std::pair<SceneDescription::SceneId, Rendering::ObjectId>;
75
76 /**
77 * Definition of a map mapping filenames to scene ids.
78 */
79 using SceneFilenameMap = std::unordered_map<std::string, SceneIdPair>;
80
81 public:
82
83 /**
84 * Creates a new application object.
85 * @param androidApp The android app object as provided in the main function of the native activity, must be valid
86 */
87 explicit VRNativeApplicationAdvanced(struct android_app* androidApp);
88
89 /**
90 * Destructs this object.
91 */
93
94 /**
95 * Loads a new 3D model file to the scene.
96 * Once the scene is loaded, the onModelLoaded() event function will be called.
97 * @param modelFilename The filename of the 3D model to be loaded, must be valid
98 * @param world_T_model The transformation between model and world to be set after the model is loded, must be valid
99 * @see removeModel(), onModelLoaded().
100 */
101 void loadModel(std::string modelFilename, const HomogenousMatrix4& world_T_model = HomogenousMatrix4(true));
102
103 /**
104 * Removes a 3D model file from the scene.
105 * Once the scene is removed, the onModelRemoved() event function will be called.
106 * @param modelFilename The filename of the 3D model to be removed, must be valid
107 * @see loadModel(), onModelRemoved().
108 */
109 void removeModel(std::string modelFilename);
110
111 protected:
112
113 /**
114 * Disabled copy constructor.
115 * @param nativeApplication Application object which would have been copied
116 */
118
119 /**
120 * Returns the names of the necessary OpenXR extensions the application needs.
121 * @see NativeApplication::necessaryOpenXRExtensionNames().
122 */
124
125 /**
126 * Removes all 3D scene models from the scenegraph which are queued to be removed.
127 */
129
130 /**
131 * Removes a loaded 3D scene model from the scenegraph.
132 * @param sceneIdPair The pair combining the scene id and rendering object id of a model to be removed, must be valid
133 * @param filename The filename of the 3D model to be removed, must be valid
134 */
135 virtual void invokeRemoveModel(const SceneIdPair& sceneIdPair, const std::string& filename);
136
137 /**
138 * Loads all 3D scene models into the scenegraph which are queued to be loaded.
139 * @param predictedDisplayTime The timestamp which will be used for rendering, must be valid
140 */
141 virtual void handleModelLoadQueue(const Timestamp& predictedDisplayTime);
142
143 /**
144 * Event function called whenever the session is ready, when the session state changed to XR_SESSION_STATE_READY.
145 * @see VRNativeApplication::onOpenXRSessionReady().
146 */
147 void onOpenXRSessionReady() override;
148
149 /**
150 * Event function called whenever the session is stopping, when the session state changed to XR_SESSION_STATE_STOPPING.
151 * @see VRNativeApplication::onOpenXRSessionStopping().
152 */
153 void onOpenXRSessionStopping() override;
154
155 /**
156 * The event function which is called when all resources should finally be released.
157 * @see NativeApplication::onReleaseResources().
158 */
159 void onReleaseResources() override;
160
161 /**
162 * Event function called after the framebuffer has been initialized.
163 * @see VRNativeApplication::onFramebufferInitialized().
164 */
166
167 /**
168 * Event function called before the framebuffer will be released.
169 * @see VRNativeApplication::onFramebufferReleasing().
170 */
171 void onFramebufferReleasing() override;
172
173 /**
174 * Event function allows to add custom compositor layers at the very back.
175 * @see VRNativeApplication::onAddCompositorBackLayers().
176 */
177 void onAddCompositorBackLayers(XrCompositorLayerUnions& xrCompositorLayerUnions) override;
178
179 /**
180 * Events function called before the scene is rendered.
181 * @see VRNativeApplication::onPreRender().
182 */
183 void onPreRender(const XrTime& xrPredictedDisplayTime, const Timestamp& predictedDisplayTime) override;
184
185 /**
186 * Event function called after a new 3D model has been loaded or has failed to load.
187 * @param modelFilename The filename of the model which has been loaded, will be valid
188 * @param scene The scene object of the new model, will be invalid if the model could not be loaded
189 */
190 virtual void onModelLoaded(const std::string& modelFilename, const Rendering::SceneRef& scene);
191
192 /**
193 * Event function called after a 3D model has been removed.
194 * @param modelFilename The filename of the model which has been removed, will be valid
195 */
196 virtual void onModelRemoved(const std::string& modelFilename);
197
198 /**
199 * Disabled copy operator.
200 * @param nativeApplication Application object which would have been copied
201 * @return Reference to this object
202 */
204
205 protected:
206
207 /// The visualizer for controllers.
209
210 /// The visualizer for hands.
212
213 /// The accessor for most recent hand poses.
215
216 /// The passhrough object.
218
219 private:
220
221 /// The pending 3D model files which will be loaded once the access to the disk is granted.
223
224 /// The pending 3D model files to be removed.
226
227 /// The map combining filenames with scene ids.
229
230 /// The lock for the 3D model filename queue.
232
233 /// The timestamp when the scene description was updated the last time.
235};
236
237#ifdef OCEAN_PLATFORM_QUEST_OPENXR_APPLICATION_USE_EXTERNAL_RESOURCES
238
239/**
240 * Registers external resources.
241 * @ingroup platformmetaquestopenxrapplication
242 */
244
245/**
246 * Un-registers external resources.
247 * @ingroup platformmetaquestopenxrapplication
248 */
250
251#endif
252
253}
254
255}
256
257}
258
259}
260
261}
262
263}
264
265#endif // META_OCEAN_PLATFORM_META_QUEST_OPENXR_APPLICATION_VR_NATIVE_APPLICATION_ADVANCED_H
This class implements a recursive lock object.
Definition Lock.h:31
std::unordered_set< std::string > StringSet
Definition of an unordered set holding strings.
Definition NativeApplication.h:69
This class implements helper functions allowing to visualize the controllers of Quest headsets in an ...
Definition openxr/application/VRControllerVisualizer.h:41
This class implements helper functions allowing to visualize the hand mesh used by hand tracking (Nim...
Definition VRHandVisualizer.h:46
This class implements an advanced Oculus (VR) application using Ocean's scene graph rendering pipline...
Definition VRNativeApplicationAdvanced.h:53
void onOpenXRSessionReady() override
Event function called whenever the session is ready, when the session state changed to XR_SESSION_STA...
VRControllerVisualizer vrControllerVisualizer_
The visualizer for controllers.
Definition VRNativeApplicationAdvanced.h:208
std::queue< ModelFilenamePair > ModelFilenamePairQueue
Definition of a queue holding model filename pairs.
Definition VRNativeApplicationAdvanced.h:64
virtual void onModelLoaded(const std::string &modelFilename, const Rendering::SceneRef &scene)
Event function called after a new 3D model has been loaded or has failed to load.
void onFramebufferInitialized() override
Event function called after the framebuffer has been initialized.
HandPoses handPoses_
The accessor for most recent hand poses.
Definition VRNativeApplicationAdvanced.h:214
void onAddCompositorBackLayers(XrCompositorLayerUnions &xrCompositorLayerUnions) override
Event function allows to add custom compositor layers at the very back.
Lock modelFilenameQueueLock_
The lock for the 3D model filename queue.
Definition VRNativeApplicationAdvanced.h:231
void onFramebufferReleasing() override
Event function called before the framebuffer will be released.
Passthrough passthrough_
The passhrough object.
Definition VRNativeApplicationAdvanced.h:217
VRNativeApplicationAdvanced & operator=(const VRNativeApplicationAdvanced &nativeApplication)=delete
Disabled copy operator.
ModelFilenameQueue modelFilenameRemoveQueue_
The pending 3D model files to be removed.
Definition VRNativeApplicationAdvanced.h:225
VRNativeApplicationAdvanced(const VRNativeApplicationAdvanced &nativeApplication)=delete
Disabled copy constructor.
virtual void handleModelRemoveQueue()
Removes all 3D scene models from the scenegraph which are queued to be removed.
void removeModel(std::string modelFilename)
Removes a 3D model file from the scene.
void onReleaseResources() override
The event function which is called when all resources should finally be released.
Timestamp sceneDescriptionUpdateTimestamp_
The timestamp when the scene description was updated the last time.
Definition VRNativeApplicationAdvanced.h:234
std::unordered_map< std::string, SceneIdPair > SceneFilenameMap
Definition of a map mapping filenames to scene ids.
Definition VRNativeApplicationAdvanced.h:79
VRHandVisualizer vrHandVisualizer_
The visualizer for hands.
Definition VRNativeApplicationAdvanced.h:211
virtual void invokeRemoveModel(const SceneIdPair &sceneIdPair, const std::string &filename)
Removes a loaded 3D scene model from the scenegraph.
virtual void onModelRemoved(const std::string &modelFilename)
Event function called after a 3D model has been removed.
ModelFilenamePairQueue modelFilenameLoadQueue_
The pending 3D model files which will be loaded once the access to the disk is granted.
Definition VRNativeApplicationAdvanced.h:222
StringSet necessaryOpenXRExtensionNames() const override
Returns the names of the necessary OpenXR extensions the application needs.
std::pair< std::string, HomogenousMatrix4 > ModelFilenamePair
Definition of a pair holding a 3D model filename and an optional 6-DOF transformation.
Definition VRNativeApplicationAdvanced.h:59
void onOpenXRSessionStopping() override
Event function called whenever the session is stopping, when the session state changed to XR_SESSION_...
SceneFilenameMap sceneFilenameMap_
The map combining filenames with scene ids.
Definition VRNativeApplicationAdvanced.h:228
void loadModel(std::string modelFilename, const HomogenousMatrix4 &world_T_model=HomogenousMatrix4(true))
Loads a new 3D model file to the scene.
virtual void handleModelLoadQueue(const Timestamp &predictedDisplayTime)
Loads all 3D scene models into the scenegraph which are queued to be loaded.
void onPreRender(const XrTime &xrPredictedDisplayTime, const Timestamp &predictedDisplayTime) override
Events function called before the scene is rendered.
std::pair< SceneDescription::SceneId, Rendering::ObjectId > SceneIdPair
Definition of a pair combining scene description and rendering scene ids.
Definition VRNativeApplicationAdvanced.h:74
VRNativeApplicationAdvanced(struct android_app *androidApp)
Creates a new application object.
std::queue< std::string > ModelFilenameQueue
Definition of a queue holdingfilename.
Definition VRNativeApplicationAdvanced.h:69
This class implements a basic OpenXR (VR) application using Ocean's scene graph rendering pipline (Re...
Definition VRNativeApplication.h:53
std::vector< XrCompositorLayerUnion > XrCompositorLayerUnions
Definition of a vector holding xrCompositorLayerUnion objects.
Definition VRNativeApplication.h:86
This class implements a wrapper for OpenXR-based hand tracking.
Definition HandPoses.h:41
This class implements a wrapper for passthrough.
Definition Passthrough.h:36
This class implements a timestamp.
Definition Timestamp.h:63
void VRNativeApplicationAdvanced_registerExternalResources()
Registers external resources.
void VRNativeApplicationAdvanced_unregisterExternalResources()
Un-registers external resources.
The namespace covering the entire Ocean framework.
Definition Accessor.h:15