76 lines
1.5 KiB
C
76 lines
1.5 KiB
C
#ifndef RES_BMPPOOL_H_INCLUDED
|
|
#define RES_BMPPOOL_H_INCLUDED
|
|
|
|
#define BMP_POOL_SIZE 100
|
|
static UInt08 *bmpPool[BMP_POOL_SIZE];
|
|
static GLuint texPool[BMP_POOL_SIZE];
|
|
|
|
static void Once_InitBmpPoolInfo()
|
|
{
|
|
static Bool flag = INS_FALSE;
|
|
if(flag == INS_TRUE)return;
|
|
flag = INS_TRUE;
|
|
|
|
Int32 i;
|
|
for(i = 0; i < BMP_POOL_SIZE; i++)
|
|
{
|
|
texPool[i] = INS_INVALID_RES_ID;
|
|
bmpPool[i] = NULL;
|
|
}
|
|
}
|
|
|
|
static Int32 GrabAvailableBmpPoolIdx()
|
|
{
|
|
Int32 i;
|
|
for(i = 0; i < BMP_POOL_SIZE; i++)
|
|
{
|
|
if(bmpPool[i] == NULL)
|
|
{
|
|
bmpPool[i] = (UInt08*)INS_INVALID_RES_ID;
|
|
texPool[i] = INS_INVALID_RES_ID;
|
|
return i;
|
|
}
|
|
}
|
|
return INS_INVALID_RES_ID;
|
|
}
|
|
|
|
static void DropBmpPool(Int32 idx)
|
|
{
|
|
if(idx < 0 || idx >= BMP_POOL_SIZE)return;
|
|
if(bmpPool[idx] == (UInt08*)INS_INVALID_RES_ID)
|
|
{
|
|
bmpPool[idx] = NULL;
|
|
}
|
|
else if(bmpPool[idx] != NULL)
|
|
{
|
|
free(bmpPool[idx]);
|
|
bmpPool[idx] = NULL;
|
|
}
|
|
if(texPool[idx] != INS_INVALID_RES_ID)
|
|
{
|
|
glDeleteTextures(1, &texPool[idx]);
|
|
texPool[idx] = INS_INVALID_RES_ID;
|
|
}
|
|
}
|
|
|
|
static void DestroyBmpPoolResouces()
|
|
{
|
|
Int32 i;
|
|
|
|
for(i = 0; i < BMP_POOL_SIZE; i++)
|
|
{
|
|
if(bmpPool[i] != NULL
|
|
&& bmpPool[i] != (UInt08*)INS_INVALID_RES_ID)
|
|
{
|
|
free(bmpPool[i]);
|
|
bmpPool[i] = NULL;
|
|
}
|
|
if(texPool[i] != INS_INVALID_RES_ID)
|
|
{
|
|
glDeleteTextures(1, &texPool[i]);
|
|
}
|
|
}
|
|
}
|
|
|
|
#endif // RES_BMPPOOL_H_INCLUDED
|