X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fframebuffer.cpp;h=8806ea6c4956d980dafd2b72419050e78813c2d8;hb=2be605933f62521bb22780256386a14b371c8b17;hp=3ac742bd209fd0e89c05d723c082524b4799c02c;hpb=f14435e58bfa0fa697a06ba9a454bb30cd37d9d8;p=libs%2Fgl.git diff --git a/source/framebuffer.cpp b/source/framebuffer.cpp index 3ac742bd..8806ea6c 100644 --- a/source/framebuffer.cpp +++ b/source/framebuffer.cpp @@ -1,3 +1,4 @@ +#include "error.h" #include "extension.h" #include "ext_framebuffer_blit.h" #include "ext_framebuffer_object.h" @@ -16,7 +17,7 @@ Framebuffer::Framebuffer(unsigned i): dirty(0) { if(id) - throw InvalidParameterValue("System framebuffer must have id 0"); + throw invalid_argument("System framebuffer must have id 0"); int viewport[4]; glGetIntegerv(GL_VIEWPORT, viewport); @@ -59,6 +60,11 @@ void Framebuffer::update_attachment(unsigned mask) const static_cast(attch.tex)->allocate(attch.level); glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, attch.attachment, attch.type, attch.tex->get_id(), attch.level); } + else if(attch.type==GL_TEXTURE_CUBE_MAP) + { + static_cast(attch.tex)->allocate(attch.level); + glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, attch.attachment, attch.cube_face, attch.tex->get_id(), attch.level); + } else glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, attch.attachment, 0, 0); } @@ -89,6 +95,11 @@ void Framebuffer::check_size() width = tex->get_width(); height = tex->get_height(); } + else if(i->type==GL_TEXTURE_CUBE_MAP) + { + width = static_cast(i->tex)->get_size(); + height = width; + } if(current()==this) glViewport(0, 0, width, height); break; @@ -98,7 +109,7 @@ void Framebuffer::check_size() void Framebuffer::attach(FramebufferAttachment attch, Renderbuffer &rbuf) { if(!id) - throw InvalidState("Can't attach to system framebuffer"); + throw invalid_operation("Framebuffer::attach"); unsigned i = get_attachment_index(attch); attachments[i].set(rbuf); @@ -109,10 +120,21 @@ void Framebuffer::attach(FramebufferAttachment attch, Renderbuffer &rbuf) void Framebuffer::attach(FramebufferAttachment attch, Texture2D &tex, unsigned level) { if(!id) - throw InvalidState("Can't attach to system framebuffer"); + throw invalid_operation("Framebuffer::attach"); + + unsigned i = get_attachment_index(attch); + attachments[i].set(tex, 0, level); + update_attachment(1<