]> git.tdb.fi Git - libs/vr.git/blob - source/openvr/openvrsystem.h
7799ad298405914f198d41c7ddd676eae902b59b
[libs/vr.git] / source / openvr / openvrsystem.h
1 #ifndef MSP_VR_OPENVRSYSTEM_H_
2 #define MSP_VR_OPENVRSYSTEM_H_
3
4 #include <msp/gl/matrix.h>
5 #include <msp/vr/system.h>
6 #include "openvrcamera.h"
7 #include "openvrcombiner.h"
8 #include "openvrcontroller.h"
9
10 namespace Msp {
11 namespace VR {
12
13 class OpenVRSystem: public System
14 {
15 private:
16         unsigned n_tracked_devices;
17         std::vector<GL::Matrix> tracking_matrices;
18         std::vector<OpenVRController *> controllers;
19         std::vector<unsigned> unclaimed_controllers;
20
21         static unsigned n_instances;
22
23 public:
24         OpenVRSystem();
25         ~OpenVRSystem();
26
27         static bool is_maybe_available();
28
29         virtual void configure_window(Graphics::Window &) const { }
30         virtual void configure_view(StereoView &) const;
31         virtual bool is_absolute_tracking_supported() const { return true; }
32         virtual void set_absolute_tracking(bool);
33         virtual bool get_absolute_tracking() const;
34         virtual OpenVRCamera *create_camera(const GL::Camera &);
35         virtual OpenVRCombiner *create_combiner(GL::View &);
36         virtual OpenVRController *create_controller();
37
38         virtual void tick();
39
40         void update_pose_matrices();
41         const GL::Matrix &get_tracking_matrix(unsigned) const;
42         const GL::Matrix &get_hmd_matrix() const;
43         void add_controller(OpenVRController &);
44         void remove_controller(OpenVRController &);
45 };
46
47 } // namespace VR
48 } // namespace Msp
49
50 #endif