Files
Cluster/insDavi2.0/src/InsRender/Res_BmpPool.h
2026-04-17 18:22:45 +08:00

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