ref: dx2: implement FreeTexture

This commit is contained in:
lewa_j
2026-01-11 00:50:44 +03:00
parent eec9609354
commit bdce95a31b
2 changed files with 46 additions and 1 deletions

View File

@@ -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;

View File

@@ -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)