#ifndef MSP_GL_VIEW_H_
#define MSP_GL_VIEW_H_
+#include <msp/core/noncopyable.h>
#include "framebuffer.h"
namespace Msp {
class Renderer;
/**
-Manages the presentation of rendering results on the screen.
+An ultimate render target, which is typically visible to the user of the
+application in some way.
+
+The content renderable's render() function is called with an empty tag. A
+Sequence can be used to specify other tags and add post-processing.
*/
-class View
+class View: public NonCopyable
{
protected:
- Framebuffer ⌖
- Camera *camera;
- Renderable *content;
- Renderer *internal_renderer;
+ Camera *camera = 0;
+ Renderable *content = 0;
+ Renderer *internal_renderer = 0;
- View(Framebuffer &);
+ View() = default;
public:
+ View(View &&);
virtual ~View();
- virtual unsigned get_width() const { return target.get_width(); }
- virtual unsigned get_height() const { return target.get_height(); }
+ virtual unsigned get_width() const { return get_target().get_width(); }
+ virtual unsigned get_height() const { return get_target().get_height(); }
float get_aspect_ratio() const { return static_cast<float>(get_width())/get_height(); }
+ /** Sets the camera to render with. The camera's aspect ratio is set to
+ match that of the view. */
void set_camera(Camera *);
+
void set_content(Renderable *);
virtual void render();
virtual void render(Renderer &);
+protected:
+ virtual const Framebuffer &get_target() const = 0;
};
} // namespace GL