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 75 76 77 78
|
#ifndef LUA_DISPLAY_LISTS_H
#define LUA_DISPLAY_LISTS_H
// LuaDisplayLists.h: interface for the CLuaDisplayLists class.
//
//////////////////////////////////////////////////////////////////////
#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 <= 0) || (index >= active.size())) {
return 0;
}
return active[index];
}
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 <= 0) || (index >= active.size())) {
return;
}
if (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 */
|