-#ifndef MSP_GL_STEREOVIEW_H_
-#define MSP_GL_STEREOVIEW_H_
+#ifndef MSP_VR_STEREOVIEW_H_
+#define MSP_VR_STEREOVIEW_H_
#include <msp/geometry/angle.h>
-#include "camera.h"
-#include "framebuffer.h"
-#include "renderable.h"
-#include "renderbuffer.h"
-#include "texture2d.h"
+#include <msp/gl/camera.h>
+#include <msp/gl/framebuffer.h>
+#include <msp/gl/renderable.h>
+#include <msp/gl/renderbuffer.h>
+#include <msp/gl/texture2d.h>
namespace Msp {
-namespace GL {
+namespace VR {
class StereoCombiner;
-class StereoView: public Renderable
+class StereoView
{
private:
struct RenderTarget
{
- Framebuffer fbo;
- Texture2D color;
- Renderbuffer depth;
+ GL::Framebuffer fbo;
+ GL::Texture2D color;
+ GL::Renderbuffer depth;
RenderTarget(unsigned, unsigned);
};
struct Eye
{
- mutable Camera camera;
+ mutable GL::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;
+ void setup_frame(const GL::Camera &, const GL::Vector3 &, float, const EyeParams &) const;
+ void render(const GL::Renderable &) const;
};
unsigned width;
unsigned height;
- const Camera &base_camera;
- const Renderable &renderable;
+ const GL::Camera &base_camera;
+ const GL::Renderable &renderable;
const StereoCombiner *combiner;
Eye left;
Eye right;
float eye_spacing;
- mutable Vector3 offset_axis;
+ Geometry::Angle<float> strabismus;
public:
- StereoView(unsigned, unsigned, const Camera &, const Renderable &, const StereoCombiner &);
+ StereoView(unsigned, unsigned, const GL::Camera &, const GL::Renderable &, const StereoCombiner &);
void set_combiner(const StereoCombiner &);
void set_eye_spacing(float);
+ void set_strabismus(const Geometry::Angle<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;
+private:
+ void setup_frame() const;
+public:
+ void render() const;
};
-} // namespace GL
+} // namespace VR
} // namespace Msp
#endif