X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Frender%2Frendertarget.h;h=bad7845c4064d1bb1c7993a97565a8aa071db81c;hp=6577cdcfb5dfa78ceb69b7842beb08ab9de3dbc8;hb=f19366d32cc29287a2730cfba90893e407754081;hpb=dbc91b65728ab9c0e574bb1127cfe4d2da55de7f diff --git a/source/render/rendertarget.h b/source/render/rendertarget.h index 6577cdcf..bad7845c 100644 --- a/source/render/rendertarget.h +++ b/source/render/rendertarget.h @@ -2,84 +2,35 @@ #define RENDERTARGET_H_ #include "framebuffer.h" -#include "texture2d.h" namespace Msp { namespace GL { -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; - - 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 Texture; +class Texture2D; class RenderTarget { private: - union TargetBuffer - { - Texture2D *texture; - Renderbuffer *buffer; - }; - unsigned width; unsigned height; - unsigned samples; - RenderTargetFormat format; - std::vector buffers; + 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)); + RenderTarget(unsigned, unsigned, const FrameFormat & = (COLOR_ATTACHMENT, DEPTH_ATTACHMENT)); private: RenderTarget(const RenderTarget &); RenderTarget &operator=(const RenderTarget &); - void init(unsigned, unsigned, unsigned, const RenderTargetFormat &); public: ~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; - void blit_from(const RenderTarget &); + const Texture2D &get_target_texture(FrameAttachment) const; void set_debug_name(const std::string &); };