+Framebuffer::Attachment &Framebuffer::get_or_create_attachment(FramebufferAttachment attch)
+{
+ for(vector<Attachment>::iterator i=attachments.begin(); i!=attachments.end(); ++i)
+ if(i->attachment==attch)
+ return *i;
+ attachments.push_back(Attachment(attch));
+ return attachments.back();
+}
+
+void Framebuffer::check_size()
+{
+ if(!attachments.empty())
+ {
+ const Attachment &attch=attachments.front();
+ if(attch.type==GL_RENDERBUFFER_EXT)
+ {
+ width=attch.rbuf->get_width();
+ height=attch.rbuf->get_height();
+ }
+ else if(attch.type==GL_TEXTURE_2D)
+ {
+ Texture2D *tex=static_cast<Texture2D *>(attch.tex);
+ width=tex->get_width();
+ height=tex->get_height();
+ }
+ if(cur_fbo==this)
+ viewport(0, 0, width, height);
+ }
+}
+