]> git.tdb.fi Git - libs/gl.git/blobdiff - source/core/framebuffer.h
Use default member initializers for simple types
[libs/gl.git] / source / core / framebuffer.h
index acb0d3ee918b5fa946549fc12484027fc9a26505..e370b7c7f38976c2211c496c4c6c5e640f835e07 100644 (file)
@@ -2,30 +2,19 @@
 #define MSP_GL_FRAMEBUFFER_H_
 
 #include <vector>
+#include "color.h"
+#include "framebuffer_backend.h"
 #include "frameformat.h"
-#include "gl.h"
 #include "texturecube.h"
-#include <msp/gl/extensions/arb_geometry_shader4.h>
-#include <msp/gl/extensions/ext_framebuffer_multisample.h>
-#include <msp/gl/extensions/ext_framebuffer_object.h>
-#include <msp/gl/extensions/nv_fbo_color_attachments.h>
 
 namespace Msp {
 namespace GL {
 
-class Texture;
 class Texture2D;
 class Texture2DMultisample;
 class Texture3D;
 class WindowView;
 
-enum BufferBits
-{
-       COLOR_BUFFER_BIT   = GL_COLOR_BUFFER_BIT,
-       DEPTH_BUFFER_BIT   = GL_DEPTH_BUFFER_BIT,
-       STENCIL_BUFFER_BIT = GL_STENCIL_BUFFER_BIT
-};
-
 class framebuffer_incomplete: public std::runtime_error
 {
 public:
@@ -45,32 +34,28 @@ must be attached for the framebuffer to be usable.
 Requires the GL_EXT_framebuffer_object extension.  The blit functions require
 the GL_EXT_framebuffer_blit extension.
 */
-class Framebuffer
+class Framebuffer: public FramebufferBackend
 {
-       friend class Commands;
-       friend class PipelineState;
+       friend FramebufferBackend;
 
 private:
        struct Attachment
        {
-               Texture *tex;
-               unsigned level;
-               int layer;
+               Texture *tex = 0;
+               unsigned level = 0;
+               int layer = 0;
 
-               Attachment();
                void set(Texture &, unsigned, int);
                void clear();
        };
 
-       unsigned id;
        FrameFormat format;
        std::vector<Attachment> attachments;
        unsigned width;
        unsigned height;
-       mutable unsigned status;
        mutable unsigned dirty;
 
-       Framebuffer(unsigned);
+       Framebuffer(bool);
 public:
        /** Creates an empty framebuffer.  Format must be set before textures can
        be attached. */
@@ -82,11 +67,6 @@ public:
        /** Creates a framebuffer and sets its format. */
        Framebuffer(const FrameFormat &);
 
-private:
-       void init();
-public:
-       ~Framebuffer();
-
        /** Sets the format of the framebuffer.  Once the format is set, it can't
        be changed. */
        void set_format(const FrameFormat &);
@@ -123,13 +103,23 @@ public:
 
        void refresh() const { if(dirty) update(); }
 
-       void set_debug_name(const std::string &);
+       using FramebufferBackend::set_debug_name;
 
        static Framebuffer &system();
 };
 
-inline BufferBits operator|(BufferBits a, BufferBits b)
-{ return static_cast<BufferBits>(static_cast<int>(a)|static_cast<int>(b)); }
+
+union ClearValue
+{
+       Color color;
+       struct
+       {
+               float depth;
+               int stencil;
+       } depth_stencil;
+
+       ClearValue(): color(0.0f, 0.0f, 0.0f, 0.0f) { }
+};
 
 } // namespace GL
 } // namespace Msp