]> git.tdb.fi Git - libs/vr.git/blobdiff - source/openvr/openvrsystem.h
Add support for motion controllers
[libs/vr.git] / source / openvr / openvrsystem.h
index 98ad55673ab78a8ad041aab66b818673158c1e69..7799ad298405914f198d41c7ddd676eae902b59b 100644 (file)
@@ -5,6 +5,7 @@
 #include <msp/vr/system.h>
 #include "openvrcamera.h"
 #include "openvrcombiner.h"
+#include "openvrcontroller.h"
 
 namespace Msp {
 namespace VR {
@@ -12,7 +13,10 @@ namespace VR {
 class OpenVRSystem: public System
 {
 private:
-       GL::Matrix hmd_matrix;
+       unsigned n_tracked_devices;
+       std::vector<GL::Matrix> tracking_matrices;
+       std::vector<OpenVRController *> controllers;
+       std::vector<unsigned> unclaimed_controllers;
 
        static unsigned n_instances;
 
@@ -20,13 +24,24 @@ public:
        OpenVRSystem();
        ~OpenVRSystem();
 
+       static bool is_maybe_available();
+
        virtual void configure_window(Graphics::Window &) const { }
        virtual void configure_view(StereoView &) const;
+       virtual bool is_absolute_tracking_supported() const { return true; }
+       virtual void set_absolute_tracking(bool);
+       virtual bool get_absolute_tracking() const;
        virtual OpenVRCamera *create_camera(const GL::Camera &);
        virtual OpenVRCombiner *create_combiner(GL::View &);
+       virtual OpenVRController *create_controller();
+
+       virtual void tick();
 
        void update_pose_matrices();
-       const GL::Matrix &get_hmd_matrix() const { return hmd_matrix; }
+       const GL::Matrix &get_tracking_matrix(unsigned) const;
+       const GL::Matrix &get_hmd_matrix() const;
+       void add_controller(OpenVRController &);
+       void remove_controller(OpenVRController &);
 };
 
 } // namespace VR