00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00021 #include <stdio.h>
00022 #include "OpenGLCache.h"
00023
00024 OpenGLCache::OpenGLCache() {
00025 cache = NULL;
00026 }
00027
00028 OpenGLCache::~OpenGLCache() {
00029 idlink *tmp;
00030 for (idlink *cur = cache; cur; cur=tmp) {
00031 tmp = cur->next;
00032 delete cur;
00033 }
00034 }
00035
00036 void OpenGLCache::encache(unsigned long id, GLuint tag) {
00037 cache = new idlink(id, tag, cache);
00038 }
00039
00040 void OpenGLCache::markUnused() {
00041 for (idlink *cur = cache; cur; cur= cur->next) {
00042 cur->used = 0;
00043 }
00044 }
00045
00046 GLuint OpenGLCache::markUsed(unsigned long id) {
00047 for (idlink *lnk = cache; lnk; lnk = lnk->next) {
00048 if (lnk->id == id) {
00049 lnk->used = 1;
00050 return lnk->gltag;
00051 }
00052 }
00053 return GLCACHE_FAIL;
00054 }
00055
00056 GLuint OpenGLCache::deleteUnused() {
00057 idlink *prev=NULL, *cur = cache;
00058 while (cur) {
00059 if (!cur->used) {
00060 GLuint tag = cur->gltag;
00061 if (prev) {
00062 prev->next = cur->next;
00063 delete cur;
00064 } else {
00065 idlink *tmp = cur->next;
00066 delete cur;
00067 cache = tmp;
00068 }
00069 return tag;
00070 }
00071 prev = cur;
00072 cur = cur->next;
00073 }
00074 return GLCACHE_FAIL;
00075 }
00076