]> git.tdb.fi Git - libs/gl.git/blobdiff - source/texgen.cpp
Enhance the extension generator to support different APIs
[libs/gl.git] / source / texgen.cpp
index e9a75d7a0ea27286287ef78ae0e0b2b5402bd3bb..4310d19a6cbfea8f2f82201997560b5d25c76e5c 100644 (file)
@@ -12,6 +12,11 @@ TexGen::TexGen():
        mode(EYE_LINEAR)
 { }
 
+TexGen::~TexGen()
+{
+       // TODO unbind
+}
+
 void TexGen::set_mode(TexGenMode m)
 {
        mode = m;
@@ -22,10 +27,12 @@ void TexGen::set_plane(const Vector4 &p)
        plane = p;
 }
 
-void TexGen::bind_to(TexCoordComponent c) const
+void TexGen::bind_to(unsigned i, TexCoordComponent c) const
 {
-       if(TexUnit::current().set_texgen(coord_index(c), this))
+       TexUnit &unit = TexUnit::get_unit(i);
+       if(unit.set_texgen(coord_index(c), this))
        {
+               unit.bind();
                glTexGeni(c, GL_TEXTURE_GEN_MODE, mode);
                if(mode==EYE_LINEAR)
                        glTexGenfv(c, GL_EYE_PLANE, &plane.x);
@@ -35,15 +42,19 @@ void TexGen::bind_to(TexCoordComponent c) const
        }
 }
 
-const TexGen *TexGen::current(TexCoordComponent c)
+const TexGen *TexGen::current(unsigned i, TexCoordComponent c)
 {
-       return TexUnit::current().get_texgen(coord_index(c));
+       return TexUnit::get_unit(i).get_texgen(coord_index(c));
 }
 
-void TexGen::unbind_from(TexCoordComponent c)
+void TexGen::unbind_from(unsigned i, TexCoordComponent c)
 {
-       if(TexUnit::current().set_texgen(coord_index(c), 0))
+       TexUnit &unit = TexUnit::get_unit(i);
+       if(unit.set_texgen(coord_index(c), 0))
+       {
+               unit.bind();
                disable(GL_TEXTURE_GEN_S+coord_index(c));
+       }
 }
 
 unsigned TexGen::coord_index(TexCoordComponent c)