mirror of
https://github.com/FWGS/xash3d-fwgs.git
synced 2026-08-05 03:24:56 +08:00
ref: dx2: implement FreeTexture
This commit is contained in:
@@ -190,6 +190,10 @@ static qboolean D3D_InitDevice()
|
||||
search.dwSize = sizeof(search);
|
||||
search.dwFlags = D3DFDS_COLORMODEL;
|
||||
search.dcmColorModel = D3DCOLOR_RGB;
|
||||
#if 0
|
||||
search.dwFlags |= D3DFDS_HARDWARE;
|
||||
search.bHardware = FALSE;
|
||||
#endif
|
||||
D3DFINDDEVICERESULT result = { 0 };
|
||||
memset(&result, 0, sizeof(result));
|
||||
result.dwSize = sizeof(result);
|
||||
@@ -319,6 +323,8 @@ static qboolean R_Init( void )
|
||||
|
||||
void R_Shutdown(void)
|
||||
{
|
||||
gEngfuncs.Con_Printf("ref: R_Shutdown()\n");
|
||||
|
||||
Mem_FreePool(&r_temppool);
|
||||
|
||||
gEngfuncs.R_Free_Video();
|
||||
@@ -516,7 +522,7 @@ static void R_DrawStretchPic( float x, float y, float w, float h, float s1, floa
|
||||
}
|
||||
#else
|
||||
|
||||
#define DX2_CREATE_EB 1
|
||||
#define DX2_CREATE_EB 0
|
||||
|
||||
if (!dxc.pd3dd)
|
||||
return;
|
||||
|
||||
@@ -718,6 +718,45 @@ void GL_FreeTexture(unsigned int texnum)
|
||||
return;
|
||||
|
||||
gEngfuncs.Con_Printf("GL_FreeTexture(%d) %s\n", texnum, dx_textures[texnum].name);
|
||||
|
||||
dx_texture_t* tex = R_GetTexture(texnum);
|
||||
if (!tex->dds)
|
||||
return;
|
||||
|
||||
// debug
|
||||
if (!tex->name[0])
|
||||
{
|
||||
gEngfuncs.Con_Printf(S_ERROR "%s: trying to free unnamed texture with handle %X\n", __func__, tex->d3dHandle);
|
||||
return;
|
||||
}
|
||||
|
||||
// remove from hash table
|
||||
dx_texture_t **prev = &dx_texturesHashTable[tex->hashValue];
|
||||
|
||||
while (1)
|
||||
{
|
||||
dx_texture_t *cur = *prev;
|
||||
if (!cur) break;
|
||||
|
||||
if (cur == tex)
|
||||
{
|
||||
*prev = cur->nextHash;
|
||||
break;
|
||||
}
|
||||
prev = &cur->nextHash;
|
||||
}
|
||||
|
||||
// TODO invalidate texture state
|
||||
|
||||
// release source
|
||||
if (tex->original)
|
||||
gEngfuncs.FS_FreeImage(tex->original);
|
||||
|
||||
if (tex->d3dTex)
|
||||
IDirect3DTexture_Release(tex->d3dTex);
|
||||
if (tex->dds)
|
||||
IDirectDrawSurface_Release(tex->dds);
|
||||
memset(tex, 0, sizeof(*tex));
|
||||
}
|
||||
|
||||
void R_OverrideTextureSourceSize(unsigned int textnum, unsigned int srcWidth, unsigned int srcHeight)
|
||||
|
||||
Reference in New Issue
Block a user