X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;ds=sidebyside;f=source%2Fframebuffer.cpp;h=c90bb22469da6b7633ac405d1dc2884d85ef61aa;hb=bec07999d95b76f4b47cffcc564d0cd0afc0435e;hp=c7bfcd5a5808120088bb72cc2c9a589742186b66;hpb=751c171a97a67f3c2077e120492746babde1d43c;p=libs%2Fgl.git diff --git a/source/framebuffer.cpp b/source/framebuffer.cpp index c7bfcd5a..c90bb224 100644 --- a/source/framebuffer.cpp +++ b/source/framebuffer.cpp @@ -3,7 +3,8 @@ #include #include #include -#include +#include +#include #include "error.h" #include "framebuffer.h" #include "misc.h" @@ -38,6 +39,15 @@ void operator<<(LexicalConverter &conv, FramebufferStatus status) 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; @@ -158,10 +168,10 @@ void Framebuffer::update_attachment(unsigned mask) const { 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); } } @@ -298,6 +308,11 @@ void Framebuffer::reset_viewport() 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); @@ -345,6 +360,9 @@ void Framebuffer::blit_from(const Framebuffer &other, BufferBits bits, bool filt void Framebuffer::bind() const { + if(id && attachments.empty()) + throw invalid_operation("Framebuffer::bind"); + if(set_current(this)) { glBindFramebuffer(GL_FRAMEBUFFER, id);