]> git.tdb.fi Git - libs/gl.git/blob - source/texenv.cpp
Always bind textures in a specific texture unit
[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 { }
10
11 void TexEnv::set_mode(TexEnvMode m)
12 {
13         mode = m;
14         if(TexUnit::current().get_texenv()==this)
15                 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, mode);
16 }
17
18 void TexEnv::set_color(const Color &c)
19 {
20         color = c;
21         if(TexUnit::current().get_texenv()==this)
22                 glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, &color.r);
23 }
24
25 void TexEnv::bind_to(unsigned i) const
26 {
27         TexUnit &unit = TexUnit::get_unit(i);
28         if(unit.set_texenv(this))
29         {
30                 unit.bind();
31                 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, mode);
32                 glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, &color.r);
33         }
34 }
35
36 const TexEnv *TexEnv::current(unsigned i)
37 {
38         return TexUnit::get_unit(i).get_texenv();
39 }
40
41 void TexEnv::unbind_from(unsigned i)
42 {
43         TexUnit &unit = TexUnit::get_unit(i);
44         if(unit.set_texenv(0))
45         {
46                 unit.bind();
47                 Color black(0, 0, 0, 0);
48                 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, MODULATE);
49                 glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, &black.r);
50         }
51 }
52
53 } // namespace GL
54 } // namespace Msp