Vegastrike 0.5.1 rc1  1.0
Original sources for Vegastrike Evolved
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
gl_fog.cpp
Go to the documentation of this file.
1 #include "gfxlib.h"
2 #include "gl_globals.h"
3 static struct _GFXFogState
4 {
5  bool enabled;
7  float density;
8  float nnear;
9  float ffar;
11  int index;
12  _GFXFogState() : c( 0, 0, 0, 0 )
13  {
14  index = 0;
15  nnear = 0;
16  ffar = 1;
17  density = 1;
18  curmode = FOG_EXP;
19  }
20 }
22 
23 void GFXFogMode( const FOGMODE fog )
24 {
25  if (GFXFogState.curmode != fog || !GFXFogState.enabled) {
26  switch (fog)
27  {
28  case FOG_OFF:
29  if (!GFXFogState.enabled)
30  return;
31  glDisable( GL_FOG );
32  GFXFogState.enabled = false;
33  return;
34  case FOG_EXP:
35  glFogi( GL_FOG_MODE, GL_EXP );
36  break;
37  case FOG_EXP2:
38  glFogi( GL_FOG_MODE, GL_EXP2 );
39  break;
40  case FOG_LINEAR:
41  glFogi( GL_FOG_MODE, GL_LINEAR );
42  break;
43  }
44  }
45  if (!GFXFogState.enabled) glEnable( GL_FOG );
46  GFXFogState.curmode = fog;
47  GFXFogState.enabled = true;
48  //glHint (GL_FOG_HINT,GL_NICEST );
49 }
50 
51 void GFXFogDensity( const float fogdensity )
52 {
53  if (fogdensity != GFXFogState.density) {
54  glFogf( GL_FOG_DENSITY, fogdensity );
55  GFXFogState.density = fogdensity;
56  }
57 }
58 
59 void GFXFogLimits( const float fognear, const float fogfar )
60 {
61  if (GFXFogState.nnear != fognear || GFXFogState.ffar != fogfar) {
62  GFXFogState.nnear = fognear;
63  GFXFogState.ffar = fogfar;
64  glFogf( GL_FOG_START, fognear );
65  glFogf( GL_FOG_END, fogfar );
66  }
67 }
68 
70 {
71  if (c.r != GFXFogState.c.r || c.g != GFXFogState.c.g || c.b != GFXFogState.c.b || c.a != GFXFogState.c.a) {
72  glFogfv( GL_FOG_COLOR, &c.r );
73  GFXFogState.c = c;
74  }
75 }
76 
77 void GFXFogIndex( const int index )
78 {
79  if (GFXFogState.index != index) {
80  glFogi( GL_FOG_INDEX, index );
82  }
83 }
84