+++ /dev/null
-#ifndef MSP_GL_STEREOVIEW_H_
-#define MSP_GL_STEREOVIEW_H_
-
-#include <msp/geometry/angle.h>
-#include "camera.h"
-#include "framebuffer.h"
-#include "renderable.h"
-#include "renderbuffer.h"
-#include "texture2d.h"
-
-namespace Msp {
-namespace GL {
-
-class StereoCombiner;
-
-class StereoView: public Renderable
-{
-private:
- struct RenderTarget
- {
- Framebuffer fbo;
- Texture2D color;
- Renderbuffer depth;
-
- RenderTarget(unsigned, unsigned);
- };
-
- struct EyeParams
- {
- Geometry::Angle<float> fov;
- float aspect;
- float near_clip;
- float far_clip;
- };
-
- struct Eye
- {
- mutable Camera camera;
- RenderTarget *target;
-
- Eye();
-
- void create_target(unsigned, unsigned);
- void setup_frame(const Camera &, const Vector3 &, const EyeParams &) const;
- void render(const Renderable &, const Tag &) const;
- };
-
- unsigned width;
- unsigned height;
- const Camera &base_camera;
- const Renderable &renderable;
- const StereoCombiner *combiner;
- Eye left;
- Eye right;
- float eye_spacing;
- mutable Vector3 offset_axis;
-
-public:
- StereoView(unsigned, unsigned, const Camera &, const Renderable &, const StereoCombiner &);
-
- void set_combiner(const StereoCombiner &);
- void set_eye_spacing(float);
-
- virtual void setup_frame() const;
- virtual void finish_frame() const;
-
- virtual void render(const Tag & = Tag()) const;
- virtual void render(Renderer &, const Tag & = Tag()) const;
-};
-
-} // namespace GL
-} // namespace Msp
-
-#endif