15 void TexGen::set_mode(TexGenMode m)
20 void TexGen::set_plane(const Vector4 &p)
25 void TexGen::bind_to(unsigned i, TexCoordComponent c) const
27 TexUnit &unit = TexUnit::get_unit(i);
28 if(unit.set_texgen(coord_index(c), this))
31 glTexGeni(c, GL_TEXTURE_GEN_MODE, mode);
33 glTexGenfv(c, GL_EYE_PLANE, &plane.x);
34 else if(mode==OBJECT_LINEAR)
35 glTexGenfv(c, GL_OBJECT_PLANE, &plane.x);
36 enable(GL_TEXTURE_GEN_S+coord_index(c));
40 const TexGen *TexGen::current(unsigned i, TexCoordComponent c)
42 return TexUnit::get_unit(i).get_texgen(coord_index(c));
45 void TexGen::unbind_from(unsigned i, TexCoordComponent c)
47 TexUnit &unit = TexUnit::get_unit(i);
48 if(unit.set_texgen(coord_index(c), 0))
49 disable(GL_TEXTURE_GEN_S+coord_index(c));
52 unsigned TexGen::coord_index(TexCoordComponent c)
56 case SCOORD: return 0;
57 case TCOORD: return 1;
58 case RCOORD: return 2;
59 case QCOORD: return 3;
60 default: throw invalid_argument("TexGen::coord_index");