X-Git-Url: http://git.tdb.fi/?p=libs%2Fvr.git;a=blobdiff_plain;f=source%2Fstereoview.h;h=75361ba13abd56acf8cc50feb0585e75daa41f24;hp=63ee1834db7b27b2c9f67ea202c32bbf616198ba;hb=HEAD;hpb=43579020c5709b589b2404414c489b0e6be3227d diff --git a/source/stereoview.h b/source/stereoview.h index 63ee183..75361ba 100644 --- a/source/stereoview.h +++ b/source/stereoview.h @@ -1,32 +1,35 @@ -#ifndef MSP_GL_STEREOVIEW_H_ -#define MSP_GL_STEREOVIEW_H_ +#ifndef MSP_VR_STEREOVIEW_H_ +#define MSP_VR_STEREOVIEW_H_ -#include "camera.h" -#include "framebuffer.h" -#include "renderable.h" -#include "renderbuffer.h" -#include "texture2d.h" +#include +#include +#include +#include +#include +#include namespace Msp { -namespace GL { +namespace VR { +class HeadTrackingCamera; +class MotionController; 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 EyeParams { - float fov; + Geometry::Angle fov; float aspect; float near_clip; float far_clip; @@ -34,40 +37,51 @@ private: struct Eye { - mutable Camera camera; + mutable GL::Camera camera; + GL::Matrix offset_matrix; RenderTarget *target; Eye(); + ~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 &, float, const EyeParams &) const; + void render(const GL::Renderable &) const; }; - unsigned width; - unsigned height; - const Camera &base_camera; - const Renderable &renderable; - const StereoCombiner *combiner; + const StereoCombiner &combiner; + const GL::Camera &base_camera; + HeadTrackingCamera *head_camera; + const GL::Renderable *content; Eye left; Eye right; - float eye_spacing; - mutable Vector3 offset_axis; + Geometry::Angle strabismus; + std::vector controllers; public: - StereoView(unsigned, unsigned, const Camera &, const Renderable &, const StereoCombiner &); + StereoView(const StereoCombiner &, const GL::Camera &); + StereoView(const StereoCombiner &, HeadTrackingCamera &); +private: + void init(); - void set_combiner(const StereoCombiner &); +public: + const GL::Camera &get_base_camera() const { return base_camera; } + const HeadTrackingCamera *get_head_camera() const { return head_camera; } + void set_content(const GL::Renderable *); void set_eye_spacing(float); + void set_eye_matrices(const GL::Matrix &, const GL::Matrix &); + void set_strabismus(const Geometry::Angle &); - virtual void setup_frame() const; - virtual void finish_frame() const; + void add_controller(MotionController &); + void remove_controller(MotionController &); - 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