18#define VRMANAGER_HXX 1
25#include <osg/observer_ptr>
27#include <osgXR/Manager>
29#include <simgear/props/propertyObject.hxx>
30#include <simgear/scene/viewer/CompositorPass.hxx>
39class VRManager :
public osgXR::Manager
43 class ReloadCompositorCallback :
public CameraInfo::ReloadCompositorCallback
47 ReloadCompositorCallback(VRManager *manager) :
52 void preReloadCompositor(CameraGroup *cgroup, CameraInfo *info)
override
54 _manager->preReloadCompositor(cgroup, info);
57 void postReloadCompositor(CameraGroup *cgroup, CameraInfo *info)
override
59 _manager->postReloadCompositor(cgroup, info);
64 osg::observer_ptr<VRManager> _manager;
67 class ViewCallback :
public osgXR::View::Callback
71 ViewCallback(VRManager *manager) :
77 void updateSubView(osgXR::View *view,
unsigned int subviewIndex,
78 const osgXR::View::SubView &subview)
override
80 _manager->updateSubView(view, subviewIndex, subview);
85 osg::observer_ptr<VRManager> _manager;
90 static VRManager *instance();
92 void syncProperties();
93 void syncReadOnlyProperties();
94 void syncSettingProperties();
98 bool getUseMirror()
const;
100 void setValidationLayer(
bool validationLayer);
101 void setDepthInfo(
bool depthInfo);
102 void setVisibilityMask(
bool visibilityMask);
104 void setVRMode(
const std::string& mode);
105 void setSwapchainMode(
const std::string& mode);
106 void setMirrorMode(
const std::string& mode);
110 void update()
override;
112 void doCreateView(osgXR::View *xrView)
override;
113 void doDestroyView(osgXR::View *xrView)
override;
115 void onRunning()
override;
116 void onStopped()
override;
120 void preReloadCompositor(CameraGroup *cgroup, CameraInfo *info);
121 void postReloadCompositor(CameraGroup *cgroup, CameraInfo *info);
123 void updateSubView(osgXR::View *view,
unsigned int subviewIndex,
124 const osgXR::View::SubView &subview);
128 typedef std::map<osgXR::View *, osg::ref_ptr<CameraInfo>> XRViewToCamInfo;
129 XRViewToCamInfo _camInfos;
131 typedef std::map<CameraInfo *, osg::ref_ptr<osgXR::View>> CamInfoToXRView;
132 CamInfoToXRView _xrViews;
134 osg::ref_ptr<ReloadCompositorCallback> _reloadCompositorCallback;
138 SGPropObjBool _propXrLayersValidation;
139 SGPropObjBool _propXrExtensionsDepthInfo;
140 SGPropObjBool _propXrExtensionsVisibilityMask;
141 SGPropObjString _propXrRuntimeName;
142 SGPropObjString _propXrSystemName;
144 SGPropObjString _propStateString;
145 SGPropObjBool _propPresent;
146 SGPropObjBool _propRunning;
148 SGPropObjBool _propEnabled;
149 SGPropObjBool _propDepthInfo;
150 SGPropObjBool _propVisibilityMask;
151 SGPropObjBool _propValidationLayer;
152 SGPropObjString _propMode;
153 SGPropObjString _propSwapchainMode;
154 SGPropObjBool _propMirrorEnabled;
155 SGPropObjString _propMirrorMode;
159 template <
typename T,
typename R = T>
160 class Listener :
public SGPropertyChangeListener
163 typedef void (VRManager::*SetterFn)(
R v);
165 Listener(VRManager *manager, SetterFn setter) :
171 void valueChanged(SGPropertyNode *node)
override
173 (_manager->*_setter)(node->template getValue<T>());
181 typedef Listener<bool> ListenerBool;
182 typedef Listener<std::string, const std::string&> ListenerString;
184 ListenerBool _listenerEnabled;
185 ListenerBool _listenerDepthInfo;
186 ListenerBool _listenerVisibilityMask;
187 ListenerBool _listenerValidationLayer;
188 ListenerString _listenerMode;
189 ListenerString _listenerSwapchainMode;
190 ListenerString _listenerMirrorMode;
FlightPlan.hxx - defines a full flight-plan object, including departure, cruise, arrival information ...