]> git.tdb.fi Git - libs/gl.git/blob - source/texenv.cpp
ff9ea197b982cdb6a092137f14c5c8f8709e2d68
[libs/gl.git] / source / texenv.cpp
1 #include "texenv.h"
2 #include "texunit.h"
3
4 namespace Msp {
5 namespace GL {
6
7 TexEnv::TexEnv():
8         mode(MODULATE),
9         color(0, 0, 0, 0)
10 { }
11
12 const TexEnv &TexEnv::default_object()
13 {
14         static TexEnv obj;
15         return obj;
16 }
17
18 void TexEnv::set_mode(TexEnvMode m)
19 {
20         mode = m;
21         if(TexUnit::current().get_texenv()==this)
22                 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, mode);
23 }
24
25 void TexEnv::set_color(const Color &c)
26 {
27         color = c;
28         if(TexUnit::current().get_texenv()==this)
29                 glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, &color.r);
30 }
31
32 void TexEnv::bind_to(unsigned i) const
33 {
34         TexUnit &unit = TexUnit::get_unit(i);
35         if(unit.set_texenv(this))
36         {
37                 unit.bind();
38                 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, mode);
39                 glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, &color.r);
40         }
41 }
42
43 const TexEnv *TexEnv::current(unsigned i)
44 {
45         return TexUnit::get_unit(i).get_texenv();
46 }
47
48 void TexEnv::unbind_from(unsigned i)
49 {
50         default_object().bind_to(i);
51 }
52
53 } // namespace GL
54 } // namespace Msp