#include <msp/gl/extensions/ext_framebuffer_object.h>
#include <msp/gl/extensions/ext_texture_array.h>
#include <msp/gl/extensions/ext_texture3d.h>
-#include <msp/gl/extensions/msp_draw_buffer.h>
+#include <msp/gl/extensions/msp_buffer_control.h>
#include "error.h"
#include "framebuffer.h"
#include "misc.h"
case FRAMEBUFFER_INCOMPLETE_READ_BUFFER:
conv.result("missing read buffer attachment");
break;
+ case FRAMEBUFFER_INCOMPLETE_MULTISAMPLE:
+ conv.result("mismatched attachment sample counts");
+ break;
+ case FRAMEBUFFER_INCOMPLETE_LAYER_COUNT:
+ conv.result("mismatched attachment layer counts");
+ break;
+ case FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS:
+ conv.result("mismatched attachment layering");
+ break;
case FRAMEBUFFER_UNSUPPORTED:
conv.result("unsupported");
break;
{
if(ARB_draw_buffers)
glDrawBuffers(color_bufs.size(), &color_bufs[0]);
- else if(MSP_draw_buffer)
+ else if(MSP_buffer_control)
glDrawBuffer(first_buffer);
- if(MSP_draw_buffer)
+ if(MSP_buffer_control)
glReadBuffer(first_buffer);
}
}
viewport(0, 0, width, height);
}
+void Framebuffer::clear()
+{
+ clear(COLOR_BUFFER_BIT|DEPTH_BUFFER_BIT|STENCIL_BUFFER_BIT);
+}
+
void Framebuffer::clear(BufferBits bits)
{
BindRestore _bind(this);
void Framebuffer::bind() const
{
+ if(id && attachments.empty())
+ throw invalid_operation("Framebuffer::bind");
+
if(set_current(this))
{
glBindFramebuffer(GL_FRAMEBUFFER, id);