--- /dev/null
+#ifndef MSP_VR_LIBOVRSYSTEM_H_
+#define MSP_VR_LIBOVRSYSTEM_H_
+
+#include <msp/vr/system.h>
+#include "libovrcamera.h"
+#include "libovrcombiner.h"
+
+namespace Msp {
+namespace VR {
+
+class LibOVRSystem: public System
+{
+public:
+ struct Private;
+
+private:
+ Private *priv;
+ unsigned frame_index;
+ bool timing_active;
+
+ static unsigned n_instances;
+
+public:
+ LibOVRSystem();
+ virtual ~LibOVRSystem();
+
+ const Private &get_private() const { return *priv; }
+
+ virtual void configure_window(Graphics::Window &) const;
+ virtual void configure_view(StereoView &) const;
+ virtual LibOVRCamera *create_camera(const GL::Camera &);
+ virtual LibOVRCombiner *create_combiner(GL::View &);
+
+ void begin_frame();
+ void end_frame();
+ bool is_timing_active() const { return timing_active; }
+ double get_tracking_time() const;
+ double get_timewarp_time() const;
+ double get_current_time() const;
+};
+
+} // namespace VR
+} // namespace Msp
+
+#endif