namespace Msp {
namespace VR {
+class OculusRiftDevice;
+
/**
Presents a stereo view in a way suitable for an Oculus Rift HMD. All distances
are specified in multiples of the screen width.
class OculusRiftCombiner: public StereoCombiner
{
private:
- GL::Mesh mesh;
+ const OculusRiftDevice &device;
+ GL::Mesh left_mesh;
+ GL::Mesh right_mesh;
GL::Program shprog;
- GL::ProgramData left_shdata;
- GL::ProgramData right_shdata;
- float view_distance;
- float lens_separation;
- float eye_separation;
- float distortion[4];
- float chromatic[4];
- float fill_factor;
+ GL::ProgramData shdata;
public:
- OculusRiftCombiner();
-
- void set_view_distance(float);
- void set_lens_separation(float);
- void set_eye_separation(float);
- void set_distortion(float = 1.0f, float = 0.0f, float = 0.0f, float = 0.0f);
- void set_red_aberration(float = 1.0f, float = 0.0f);
- void set_blue_aberration(float = 1.0f, float = 0.0f);
- void set_fill_factor(float);
-private:
- void update_parameters();
+ OculusRiftCombiner(const OculusRiftDevice &);
- float distort(float) const;
- float undistort(float) const;
-
-public:
virtual void render(const GL::Texture2D &, const GL::Texture2D &) const;
};