15 void TexGen::set_mode(TexGenMode m)
20 void TexGen::set_plane(const Vector4 &p)
25 void TexGen::bind_to(TexCoordComponent c) const
27 if(TexUnit::current().set_texgen(coord_index(c), this))
29 glTexGeni(c, GL_TEXTURE_GEN_MODE, mode);
31 glTexGenfv(c, GL_EYE_PLANE, &plane.x);
32 else if(mode==OBJECT_LINEAR)
33 glTexGenfv(c, GL_OBJECT_PLANE, &plane.x);
34 enable(GL_TEXTURE_GEN_S+coord_index(c));
38 const TexGen *TexGen::current(TexCoordComponent c)
40 return TexUnit::current().get_texgen(coord_index(c));
43 void TexGen::unbind_from(TexCoordComponent c)
45 if(TexUnit::current().set_texgen(coord_index(c), 0))
46 disable(GL_TEXTURE_GEN_S+coord_index(c));
49 unsigned TexGen::coord_index(TexCoordComponent c)
53 case SCOORD: return 0;
54 case TCOORD: return 1;
55 case RCOORD: return 2;
56 case QCOORD: return 3;
57 default: throw invalid_argument("TexGen::coord_index");