+++ /dev/null
-/* $Id$
-
-This file is part of libmspgl
-Copyright © 2010 Mikko Rasa, Mikkosoft Productions
-Distributed under the LGPL
-*/
-
-#include "texenv.h"
-#include "texture.h"
-#include "texturing.h"
-#include "texunit.h"
-
-namespace Msp {
-namespace GL {
-
-Texturing::~Texturing()
-{
- if(current()==this)
- unbind();
-}
-
-void Texturing::attach(unsigned attch, const Texture &tex)
-{
- set_attachment(attch, &tex, 0);
-}
-
-void Texturing::attach(unsigned attch, const Texture &tex, const TexEnv &env)
-{
- set_attachment(attch, &tex, &env);
-}
-
-void Texturing::detach(unsigned attch)
-{
- set_attachment(attch, 0, 0);
-}
-
-void Texturing::set_attachment(unsigned attch, const Texture *tex, const TexEnv *env)
-{
- if(attch>=TexUnit::get_n_units())
- throw InvalidParameterValue("Invalid texture attachment");
-
- if(attachments.size()<=attch)
- attachments.resize(attch+1);
-
- attachments[attch].tex = tex;
- attachments[attch].env = env;
-
- if(current()==this)
- bind_attachment(attch);
-}
-
-void Texturing::bind_attachment(unsigned i) const
-{
- const Attachment &attch = attachments[i];
- TexUnit::activate(i);
- if(attch.tex)
- attch.tex->bind();
- else
- Texture::unbind();
- if(attch.env)
- attch.env->bind();
- else
- TexEnv::unbind();
-}
-
-void Texturing::unbind_attachment(unsigned i)
-{
- TexUnit::activate(i);
- Texture::unbind();
- TexEnv::unbind();
-}
-
-void Texturing::bind() const
-{
- const Texturing *old = current();
- if(set_current(this))
- {
- for(unsigned i=0; i<attachments.size(); ++i)
- bind_attachment(i);
- if(old)
- {
- for(unsigned i=attachments.size(); i<old->attachments.size(); ++i)
- unbind_attachment(i);
- }
- }
-}
-
-void Texturing::unbind()
-{
- const Texturing *old = current();
- if(set_current(0))
- {
- for(unsigned i=old->attachments.size(); i--;)
- unbind_attachment(i);
- }
-}
-
-
-Texturing::Attachment::Attachment():
- tex(0),
- env(0)
-{ }
-
-} // namespace GL
-} // namespace Msp;