]> git.tdb.fi Git - libs/vr.git/blobdiff - source/stereocombiner.h
Add dependency to mspgui since symbols from it are used
[libs/vr.git] / source / stereocombiner.h
index f078df773592531fe9b8ad79b3aa74d6321b5bc2..bef0849b39ee4a460d8c8c838957286f70dc4fa9 100644 (file)
@@ -10,22 +10,37 @@ namespace VR {
 class StereoCombiner
 {
 protected:
-       unsigned width_div;
-       unsigned height_div;
-       bool keep_aspect;
+       struct Frustum
+       {
+               float left;
+               float right;
+               float bottom;
+               float top;
+
+               Frustum();
+               Frustum(float, float, float, float);
+       };
+
+       unsigned target_width;
+       unsigned target_height;
+       float render_aspect;
        Geometry::Angle<float> fov;
-       float oversize;
+       float frustum_skew;
 
        StereoCombiner();
 public:
        virtual ~StereoCombiner() { }
 
-       unsigned get_width_divisor() const { return width_div; }
-       unsigned get_height_divisor() const { return height_div; }
-       bool is_aspect_kept() const { return keep_aspect; }
+protected:
+       void configure_eye_frustums(const Frustum &, const Frustum &);
+public:
+       float get_target_width() const { return target_width; }
+       float get_target_height() const { return target_height; }
+       float get_render_aspect() const { return render_aspect; }
        const Geometry::Angle<float> &get_field_of_view() const { return fov; }
-       float get_oversize() const { return oversize; }
+       float get_frustum_skew() const { return frustum_skew; }
 
+       virtual void prepare() const { }
        virtual void render(const GL::Texture2D &, const GL::Texture2D &) const = 0;
 };