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
decalqueue.h
Go to the documentation of this file.
1 #include <vector>
2 #include <string>
3 #include "vs_globals.h"
4 class DecalQueue
5 {
6  int nullity;
7  std::vector< int >decalref;
8  std::vector< Texture* >decal;
9 public: DecalQueue()
10  {
11  nullity = -1;
12  }
13  inline Texture * GetTexture( const unsigned int ref )
14  {
15  return decal[ref];
16  }
17  unsigned int AddTexture( const char *texname, enum FILTER mipmap )
18  {
19  Texture *tmpDecal = Texture::Exists( std::string( texname ) );
20  if (nullity != -1 && tmpDecal == NULL && !g_game.use_textures)
21  tmpDecal = decal[nullity];
22  unsigned int i = 0;
23  unsigned int retval = 0;
24  int nullio = -1;
25  if (tmpDecal) {
26  for (; i < decal.size(); i++) {
27  if (decal[i]) {
28  if ( (*decal[i]) == (*tmpDecal) ) {
29  retval = i;
30  decalref[i]++;
31  break;
32  }
33  }
34  if (!decal[i] && decalref[i] == 0)
35  nullio = i;
36  }
37  }
38  if ( !tmpDecal || i == decal.size() ) {
39  //make sure we have our own to delete upon refcount =0
40  Texture *tex = new Texture( texname, 0, mipmap, TEXTURE2D, TEXTURE_2D, GFXTRUE );
41  if ( (nullity == -1) || tex->LoadSuccess() ) {
42  if (nullio != -1) {
43  retval = nullio;
44  decal[nullio] = tex;
45  decalref[nullio] = 1;
46  } else {
47  retval = decal.size();
48  decal.push_back( tex );
49  decalref.push_back( 1 );
50  }
51  }
52  if ( !tex->LoadSuccess() ) {
53  if (nullity == -1) {
54  nullity = retval;
55  } else {
56  delete tex;
57  tex = NULL;
58  retval = nullity;
59  decalref[nullity]++;
60  }
61  }
62  }
63  return retval;
64  }
65  bool DelTexture( unsigned int ref )
66  {
67  decalref[ref]--;
68  if (decalref[ref] <= 0) {
69  delete decal[ref];
70  decal[ref] = NULL;
71  return true;
72  }
73  return false;
74  }
75 };
76