X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Frender%2Ftexturing.cpp;fp=source%2Frender%2Ftexturing.cpp;h=0000000000000000000000000000000000000000;hb=5b652353d545a3190ea2d86ba82a87b2e3382a0d;hp=341cdb79712f6c739ffed027d4ac069f7e04b234;hpb=dbc91b65728ab9c0e574bb1127cfe4d2da55de7f;p=libs%2Fgl.git diff --git a/source/render/texturing.cpp b/source/render/texturing.cpp deleted file mode 100644 index 341cdb79..00000000 --- a/source/render/texturing.cpp +++ /dev/null @@ -1,171 +0,0 @@ -#include -#include "texture.h" -#include "texturing.h" -#include "texunit.h" - -using namespace std; - -#pragma GCC diagnostic ignored "-Wdeprecated-declarations" - -namespace Msp { -namespace GL { - -Texturing::~Texturing() -{ - if(current()==this) - unbind(); -} - -int Texturing::find_free_unit(const string &name_hint) const -{ - unsigned max_unit = TexUnit::get_n_units(); - // Leave some space for effect textures - max_unit -= min(max_unit/4, 8U); - unsigned initial_unit = (name_hint.empty() ? 0 : hash32(name_hint)%max_unit); - unsigned unit = initial_unit; - while(get_attached_texture(unit) || get_attached_sampler(unit)) - { - unit = (unit+1)%max_unit; - if(unit==initial_unit) - return -1; - } - - return unit; -} - -void Texturing::attach(unsigned attch, const Texture &tex, const Sampler *samp) -{ - set_attachment(attch, &tex, samp); -} - -void Texturing::attach(unsigned attch, const Sampler &samp) -{ - set_attachment(attch, 0, &samp); -} - -void Texturing::detach(unsigned attch) -{ - set_attachment(attch, 0, 0); -} - -void Texturing::set_attachment(unsigned unit, const Texture *tex, const Sampler *samp) -{ - if(unit>=TexUnit::get_n_units()) - throw out_of_range("Texturing::set_attachment"); - - if(tex || samp) - { - vector::iterator i; - for(i=attachments.begin(); (i!=attachments.end() && i->unit<=unit); ++i) - if(i->unit==unit) - { - i->texture = tex; - i->sampler = samp; - if(current()==this) - bind_attachment(*i); - return; - } - - attachments.insert(i, Attachment(unit, tex, samp)); - if(current()==this) - tex->bind_to(unit); - } - else - { - for(vector::iterator i=attachments.begin(); (i!=attachments.end() && i->unit<=unit); ++i) - if(i->unit==unit) - { - attachments.erase(i); - if(current()==this) - unbind_attachment(unit); - return; - } - } -} - -const Texture *Texturing::get_attached_texture(unsigned unit) const -{ - for(vector::const_iterator i=attachments.begin(); (i!=attachments.end() && i->unit<=unit); ++i) - if(i->unit==unit) - return i->texture; - return 0; -} - -const Sampler *Texturing::get_attached_sampler(unsigned unit) const -{ - for(vector::const_iterator i=attachments.begin(); (i!=attachments.end() && i->unit<=unit); ++i) - if(i->unit==unit) - return i->sampler; - return 0; -} - -void Texturing::bind() const -{ - const Texturing *old = current(); - if(set_current(this)) - { - if(old) - { - vector::const_iterator i = attachments.begin(); - vector::const_iterator j = old->attachments.begin(); - while(i!=attachments.end() || j!=old->attachments.end()) - { - if(i!=attachments.end() && (j==old->attachments.end() || i->unit<=j->unit)) - { - bind_attachment(*i); - if(j!=old->attachments.end() && j->unit==i->unit) - ++j; - ++i; - } - else - { - unbind_attachment(j->unit); - ++j; - } - } - } - else - { - for(vector::const_iterator i=attachments.begin(); i!=attachments.end(); ++i) - bind_attachment(*i); - } - } -} - -void Texturing::bind_attachment(const Attachment &attch) const -{ - if(attch.sampler) - attch.sampler->bind_to(attch.unit); - else - Sampler::unbind_from(attch.unit); - if(attch.texture) - attch.texture->bind_to(attch.unit); - else - Texture::unbind_from(attch.unit); -} - -void Texturing::unbind() -{ - const Texturing *old = current(); - if(set_current(0)) - { - for(vector::const_iterator i=old->attachments.begin(); i!=old->attachments.end(); ++i) - unbind_attachment(i->unit); - } -} - -void Texturing::unbind_attachment(unsigned unit) -{ - Texture::unbind_from(unit); - Sampler::unbind_from(unit); -} - - -Texturing::Attachment::Attachment(unsigned u, const Texture *t, const Sampler *s): - unit(u), - texture(t), - sampler(s) -{ } - -} // namespace GL -} // namespace Msp;