X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Frender%2Frendertarget.h;h=b7d4af03840f4e81196fad3222255b74be345732;hp=f13d23d9683a12b2828272125a610570b52c28ca;hb=HEAD;hpb=cd5f37b066352119cf92d53d0001af7ff99be437 diff --git a/source/render/rendertarget.h b/source/render/rendertarget.h index f13d23d9..a59e382c 100644 --- a/source/render/rendertarget.h +++ b/source/render/rendertarget.h @@ -1,6 +1,7 @@ #ifndef RENDERTARGET_H_ #define RENDERTARGET_H_ +#include #include "framebuffer.h" namespace Msp { @@ -9,72 +10,32 @@ namespace GL { class Texture; class Texture2D; -enum RenderOutput -{ - RENDER_COLOR = 0|3, - RENDER_DEPTH = 192|12 -}; - -class RenderTargetFormat -{ -private: - enum { MAX_OUTPUTS = 7 }; - - unsigned char count; - unsigned char outputs[MAX_OUTPUTS]; - -public: - RenderTargetFormat(); - RenderTargetFormat(RenderOutput); - - RenderTargetFormat operator,(RenderOutput) const; - RenderTargetFormat operator,(PixelFormat) const; +/** +Wraps a Framebuffer and its attachments for easier management. - bool empty() const { return !count; } - const unsigned char *begin() const { return outputs; } - const unsigned char *end() const { return outputs+count; } - int index(RenderOutput) const; -}; - -inline RenderTargetFormat operator,(RenderOutput o1, RenderOutput o2) -{ return (RenderTargetFormat(o1), o2); } - -inline RenderTargetFormat operator,(RenderOutput o, PixelFormat f) -{ return (RenderTargetFormat(o), f); } - -inline unsigned get_output_type(unsigned char o) -{ return o>>4; } - -PixelFormat get_output_pixelformat(unsigned char); - - -class RenderTarget +All attachments will be created as 2D or 2D multisample textures, depending on +the sample count of the format. For multisampled formats, resolve attachments +are also created. +*/ +class RenderTarget: public NonCopyable { private: unsigned width; unsigned height; - unsigned samples; - RenderTargetFormat format; std::vector textures; Framebuffer fbo; public: - RenderTarget(unsigned, unsigned, RenderOutput); - RenderTarget(unsigned, unsigned, const RenderTargetFormat & = (RENDER_COLOR, RENDER_DEPTH)); - RenderTarget(unsigned, unsigned, unsigned, const RenderTargetFormat & = (RENDER_COLOR, RENDER_DEPTH)); -private: - RenderTarget(const RenderTarget &); - RenderTarget &operator=(const RenderTarget &); - void init(unsigned, unsigned, unsigned, const RenderTargetFormat &); -public: + RenderTarget(unsigned, unsigned, const FrameFormat & = (COLOR_ATTACHMENT, DEPTH_ATTACHMENT)); + RenderTarget(RenderTarget &&) = default; ~RenderTarget(); unsigned get_width() const { return width; } unsigned get_height() const { return height; } - const RenderTargetFormat &get_format() const { return format; } + const FrameFormat &get_format() const { return fbo.get_format(); } Framebuffer &get_framebuffer() { return fbo; } const Texture2D &get_target_texture(unsigned) const; - const Texture2D &get_target_texture(RenderOutput) const; + const Texture2D &get_target_texture(FrameAttachment) const; void set_debug_name(const std::string &); };