10 Texturing::~Texturing()
16 void Texturing::attach(unsigned attch, const Texture &tex)
18 set_attachment(attch, &tex);
21 void Texturing::detach(unsigned attch)
23 set_attachment(attch, 0);
26 void Texturing::set_attachment(unsigned unit, const Texture *tex)
28 if(unit>=TexUnit::get_n_units())
29 throw out_of_range("Texturing::set_attachment");
33 vector<Attachment>::iterator i;
34 for(i=attachments.begin(); (i!=attachments.end() && i->unit<=unit); ++i)
43 attachments.insert(i, Attachment(unit, tex));
49 for(vector<Attachment>::iterator i=attachments.begin(); (i!=attachments.end() && i->unit<=unit); ++i)
54 Texture::unbind_from(unit);
60 const Texture *Texturing::get_attached_texture(unsigned unit) const
62 for(vector<Attachment>::const_iterator i=attachments.begin(); (i!=attachments.end() && i->unit<=unit); ++i)
68 void Texturing::bind() const
70 const Texturing *old = current();
75 vector<Attachment>::const_iterator i = attachments.begin();
76 vector<Attachment>::const_iterator j = old->attachments.begin();
77 while(i!=attachments.end() || j!=old->attachments.end())
79 if(i!=attachments.end() && (j==old->attachments.end() || i->unit<=j->unit))
81 i->texture->bind_to(i->unit);
82 if(j!=old->attachments.end() && j->unit==i->unit)
88 Texture::unbind_from(j->unit);
95 for(vector<Attachment>::const_iterator i=attachments.begin(); i!=attachments.end(); ++i)
96 i->texture->bind_to(i->unit);
101 void Texturing::unbind()
103 const Texturing *old = current();
106 for(vector<Attachment>::const_iterator i=old->attachments.begin(); i!=old->attachments.end(); ++i)
107 Texture::unbind_from(i->unit);
112 Texturing::Attachment::Attachment(unsigned u, const Texture *t):