Add query functions for whether certain features are supported
authorMikko Rasa <tdb@tdb.fi>
Mon, 3 Oct 2016 14:43:43 +0000 (17:43 +0300)
committerMikko Rasa <tdb@tdb.fi>
Mon, 3 Oct 2016 14:43:43 +0000 (17:43 +0300)
System::set_absolute_tracking now has a default implementation which
throws an exception.

source/libovr/libovrsystem.cpp
source/libovr/libovrsystem.h
source/openvr/openvrcombiner.h
source/openvr/openvrsystem.cpp
source/openvr/openvrsystem.h
source/stereocombiner.cpp
source/stereocombiner.h
source/system.cpp
source/system.h

index 0136d49dd7616c8c75fb6b7a647032c6fb209908..c8183b08eb64d939d10e4c1e060da0ac46008fed 100644 (file)
@@ -65,12 +65,6 @@ void LibOVRSystem::configure_view(StereoView &view) const
        view.set_eye_matrices(GL::Matrix::translation(GL::Vector3(l.x, l.y, l.z)), GL::Matrix::translation(GL::Vector3(r.x, r.y, r.z)));
 }
 
-void LibOVRSystem::set_absolute_tracking(bool a)
-{
-       if(a)
-               throw invalid_argument("absolute tracking not supported");
-}
-
 LibOVRCamera *LibOVRSystem::create_camera(const GL::Camera &bc)
 {
        return new LibOVRCamera(*this, bc);
index a7978e47ff7128f1d9cc0bed8a39f7f29638fa98..d5623a02d848657b618743dec2aa983b0456311f 100644 (file)
@@ -28,7 +28,6 @@ public:
 
        virtual void configure_window(Graphics::Window &) const;
        virtual void configure_view(StereoView &) const;
-       virtual void set_absolute_tracking(bool);
        virtual LibOVRCamera *create_camera(const GL::Camera &);
        virtual LibOVRCombiner *create_combiner(GL::View &);
 
index 94ccce36be99b597bf05f9fd7c23406eee88cd6d..5b9e3b4235a26d49377b19c71145d67a1981e5a6 100644 (file)
@@ -20,6 +20,7 @@ private:
 public:
        OpenVRCombiner(OpenVRSystem &, GL::View &);
 
+       virtual bool is_mirroring_supported() const { return true; }
        virtual void prepare() const;
        virtual void render(const GL::Texture2D &, const GL::Texture2D &) const;
 };
index c137400542448b42fd12b5b7dccf84cef341e46f..50d2ecfec54b05380c41bcfa24084aca5e14738a 100644 (file)
@@ -79,6 +79,11 @@ void OpenVRSystem::set_absolute_tracking(bool a)
        vr::VRCompositor()->SetTrackingSpace(a ? vr::TrackingUniverseStanding : vr::TrackingUniverseSeated);
 }
 
+bool OpenVRSystem::get_absolute_tracking() const
+{
+       return vr::VRCompositor()->GetTrackingSpace()==vr::TrackingUniverseStanding;
+}
+
 OpenVRCamera *OpenVRSystem::create_camera(const GL::Camera &bc)
 {
        return new OpenVRCamera(*this, bc);
index 498865992fdaa8c5a886e3f3e2bb8bdb1d3f128d..06881f8b531370ff63b2464d8b098cb3493055a2 100644 (file)
@@ -24,7 +24,9 @@ public:
 
        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 &);
 
index ebb888ee6fe59ec6bd39446ebff00008b21380e4..34c13bdb6856e26aaa72a6365cafeec4d2efa201 100644 (file)
@@ -51,6 +51,9 @@ void StereoCombiner::configure_eye_frustums(const Frustum &left_frustum, const F
 
 void StereoCombiner::set_mirroring(bool m)
 {
+       if(m && !is_mirroring_supported())
+               throw runtime_error("mirroring not supported");
+
        if(m && !mirror)
                mirror = new MirrorView;
        else if(!m && mirror)
index 2cfe3eb1f5255f30d6104aacd6c1d734700488da..88f979caeee1c8ce35190cdcf1f7ea186cdb72e7 100644 (file)
@@ -53,7 +53,9 @@ public:
        const Geometry::Angle<float> &get_field_of_view() const { return fov; }
        float get_frustum_skew() const { return frustum_skew; }
 
+       virtual bool is_mirroring_supported() const { return false; }
        void set_mirroring(bool);
+       bool get_mirroring() const { return mirror; }
 
        virtual void prepare() const { }
        virtual void render(const GL::Texture2D &, const GL::Texture2D &) const = 0;
index c8354561489ffba0bf1b1711c7ed38db97264eb8..b4105b056a969553f4df57261e0b293b9e305219 100644 (file)
@@ -51,5 +51,11 @@ System *System::create_autodetect()
        return 0;
 }
 
+void System::set_absolute_tracking(bool a)
+{
+       if(a)
+               throw invalid_argument("absolute tracking not supported");
+}
+
 } // namespace VR
 } // namespace Msp
index f7e28b587ec7f1cfd869864b136e059ee658d9c2..69b93a15d3220a02abcaf38d52440ffcea7eaaab 100644 (file)
@@ -24,7 +24,9 @@ public:
 
        virtual void configure_window(Graphics::Window &) const = 0;
        virtual void configure_view(StereoView &) const = 0;
-       virtual void set_absolute_tracking(bool) = 0;
+       virtual bool is_absolute_tracking_supported() const { return false; }
+       virtual void set_absolute_tracking(bool);
+       virtual bool get_absolute_tracking() const { return false; }
        virtual HeadTrackingCamera *create_camera(const GL::Camera &) = 0;
        virtual StereoCombiner *create_combiner(GL::View &) = 0;
 };