]> git.tdb.fi Git - libs/gl.git/blobdiff - source/core/framebuffer.h
Completely hide OpenGL from the public headers
[libs/gl.git] / source / core / framebuffer.h
index 2f867e6c591ec69706df22fc2a90bbeef52575f8..89407e8ba69b270bcc4f707eed89dc81a6b52028 100644 (file)
@@ -2,13 +2,9 @@
 #define MSP_GL_FRAMEBUFFER_H_
 
 #include <vector>
+#include "color.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 {
@@ -19,32 +15,10 @@ class Texture2DMultisample;
 class Texture3D;
 class WindowView;
 
-enum FramebufferStatus
-{
-       FRAMEBUFFER_INCOMPLETE_ATTACHMENT         = GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT,
-       FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT,
-       FRAMEBUFFER_INCOMPLETE_DIMENSIONS         = GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT,
-       FRAMEBUFFER_INCOMPLETE_FORMATS            = GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT,
-       FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER        = GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER,
-       FRAMEBUFFER_INCOMPLETE_READ_BUFFER        = GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER,
-       FRAMEBUFFER_INCOMPLETE_MULTISAMPLE        = GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE,
-       FRAMEBUFFER_INCOMPLETE_LAYER_COUNT        = GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_ARB,
-       FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS      = GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS,
-       FRAMEBUFFER_UNSUPPORTED                   = GL_FRAMEBUFFER_UNSUPPORTED,
-       FRAMEBUFFER_COMPLETE                      = GL_FRAMEBUFFER_COMPLETE
-};
-
-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:
-       framebuffer_incomplete(FramebufferStatus);
+       framebuffer_incomplete(const std::string &);
        virtual ~framebuffer_incomplete() throw() { }
 };
 
@@ -82,7 +56,7 @@ private:
        std::vector<Attachment> attachments;
        unsigned width;
        unsigned height;
-       mutable FramebufferStatus status;
+       mutable unsigned status;
        mutable unsigned dirty;
 
        Framebuffer(unsigned);
@@ -132,10 +106,6 @@ public:
 
        void resize(const WindowView &);
 
-       /** Returns FRAMEBUFFER_COMPLETE if the framebuffer is complete and can be
-       rendered to, or one of the error status codes otherwise. */
-       FramebufferStatus get_status() const { return status; }
-
        /** Ensures that the framebuffer is complete, throwing an exception if it
        isn't. */
        void require_complete() const;
@@ -147,8 +117,18 @@ public:
        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