X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fstereocombiner.h;h=2cfe3eb1f5255f30d6104aacd6c1d734700488da;hb=b6de7d24475dec8f5d6b8148a69cf8b561bc0761;hp=5439aeba673da3a0d46de75a60e1445995e2dd7a;hpb=11d105c5183b401e5f52e9abb16cf659298cf035;p=libs%2Fvr.git diff --git a/source/stereocombiner.h b/source/stereocombiner.h index 5439aeb..2cfe3eb 100644 --- a/source/stereocombiner.h +++ b/source/stereocombiner.h @@ -2,6 +2,9 @@ #define MSP_VR_STEREOCOMBINER_H_ #include +#include +#include +#include #include namespace Msp { @@ -10,24 +13,52 @@ namespace VR { class StereoCombiner { protected: + struct Frustum + { + float left; + float right; + float bottom; + float top; + + Frustum(); + Frustum(float, float, float, float); + }; + + struct MirrorView + { + GL::Mesh mesh; + GL::Program shader; + GL::ProgramData shdata; + + MirrorView(); + }; + unsigned target_width; unsigned target_height; float render_aspect; Geometry::Angle fov; float frustum_skew; + MirrorView *mirror; StereoCombiner(); 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 &get_field_of_view() const { return fov; } float get_frustum_skew() const { return frustum_skew; } + void set_mirroring(bool); + virtual void prepare() const { } virtual void render(const GL::Texture2D &, const GL::Texture2D &) const = 0; +protected: + void render_mirror(const GL::Texture2D &) const; }; } // namespace VR