#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>
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() { }
};
std::vector<Attachment> attachments;
unsigned width;
unsigned height;
- mutable FramebufferStatus status;
+ mutable unsigned status;
mutable unsigned dirty;
Framebuffer(unsigned);
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;
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