1 #ifndef MSP_VR_STEREOCOMBINER_H_
2 #define MSP_VR_STEREOCOMBINER_H_
4 #include <msp/geometry/angle.h>
5 #include <msp/gl/mesh.h>
6 #include <msp/gl/program.h>
7 #include <msp/gl/programdata.h>
8 #include <msp/gl/texture2d.h>
24 Frustum(float, float, float, float);
31 GL::ProgramData shdata;
36 unsigned target_width;
37 unsigned target_height;
39 Geometry::Angle<float> fov;
45 virtual ~StereoCombiner() { }
48 void configure_eye_frustums(const Frustum &, const Frustum &);
50 float get_target_width() const { return target_width; }
51 float get_target_height() const { return target_height; }
52 float get_render_aspect() const { return render_aspect; }
53 const Geometry::Angle<float> &get_field_of_view() const { return fov; }
54 float get_frustum_skew() const { return frustum_skew; }
56 virtual bool is_mirroring_supported() const { return false; }
57 void set_mirroring(bool);
58 bool get_mirroring() const { return mirror; }
60 virtual void prepare() const { }
61 virtual void render(const GL::Texture2D &, const GL::Texture2D &) const = 0;
63 void render_mirror(const GL::Texture2D &) const;