1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
|
/* This file is part of the Spring engine (GPL v2 or later), see LICENSE.html */
#ifndef LUA_DISPLAY_LISTS_H
#define LUA_DISPLAY_LISTS_H
#include <vector>
using std::vector;
#include "Rendering/GL/myGL.h"
class CLuaDisplayLists {
public:
CLuaDisplayLists()
{
active.push_back(0);
}
~CLuaDisplayLists()
{
// free the display lists
for (int i = 0; i < (int)active.size(); i++) {
glDeleteLists(active[i], 1);
}
}
void Clear()
{
unused.clear();
active.clear();
active.push_back(0);
}
unsigned int GetCount() const { return active.size(); }
GLuint GetDList(unsigned int index) const
{
if (index < active.size()) {
return active[index];
} else {
return 0;
}
}
unsigned int NewDList(GLuint dlist)
{
if (dlist == 0) {
return 0;
}
if (!unused.empty()) {
const unsigned int index = unused[unused.size() - 1];
active[index] = dlist;
unused.pop_back();
return index;
}
active.push_back(dlist);
return active.size() - 1;
}
void FreeDList(unsigned int index)
{
if ((index < active.size()) && (active[index] != 0)) {
active[index] = 0;
unused.push_back(index);
}
}
private:
vector<GLuint> active;
vector<unsigned int> unused; // references slots in active
};
#endif /* LUA_DISPLAY_LISTS_H */
|