class StereoCombiner
{
protected:
+ 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;
public:
virtual ~StereoCombiner() { }
+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_frustum_skew() const { return frustum_skew; }
+ virtual void prepare() const { }
virtual void render(const GL::Texture2D &, const GL::Texture2D &) const = 0;
};