game(client): fix atlas generation for touch

This commit is contained in:
nillerusr 2022-09-17 21:00:50 +03:00
parent d2f789853d
commit a7611c481e
3 changed files with 18 additions and 6 deletions

View File

@ -420,13 +420,13 @@ void CTouchControls::Init()
int nextPowerOfTwo(int x) int nextPowerOfTwo(int x)
{ {
if( (x & (x - 1)) == 0) if( (x & (x - 1)) == 0)
return x; return x;
int t = 1 << 30; int t = 1 << 30;
while (x < t) t >>= 1; while (x < t) t >>= 1;
return t << 1; return t << 1;
} }
void CTouchControls::CreateAtlasTexture() void CTouchControls::CreateAtlasTexture()
@ -438,6 +438,9 @@ void CTouchControls::CreateAtlasTexture()
stbrp_rect *rects = (stbrp_rect*)malloc(textureList.Count()*sizeof(stbrp_rect)); stbrp_rect *rects = (stbrp_rect*)malloc(textureList.Count()*sizeof(stbrp_rect));
memset(rects, 0, sizeof(stbrp_node)*textureList.Count()); memset(rects, 0, sizeof(stbrp_node)*textureList.Count());
if( touchTextureID )
vgui::surface()->DeleteTextureByID( touchTextureID );
for( int i = 0; i < textureList.Count(); i++ ) for( int i = 0; i < textureList.Count(); i++ )
{ {
CTouchTexture *t = textureList[i]; CTouchTexture *t = textureList[i];
@ -516,6 +519,7 @@ void CTouchControls::CreateAtlasTexture()
} }
DestroyVTFTexture(t->vtf); DestroyVTFTexture(t->vtf);
t->isInAtlas = true;
} }
touchTextureID = vgui::surface()->CreateNewTextureID( true ); touchTextureID = vgui::surface()->CreateNewTextureID( true );
@ -643,7 +647,12 @@ void CTouchControls::Paint( )
CTouchButton *btn = *it; CTouchButton *btn = *it;
if( btn->texture != NULL && !(btn->flags & TOUCH_FL_HIDE) ) if( btn->texture != NULL && !(btn->flags & TOUCH_FL_HIDE) )
{
if( !btn->texture->isInAtlas )
CreateAtlasTexture();
meshCount++; meshCount++;
}
} }
meshBuilder.Begin( m_pMesh, MATERIAL_QUADS, meshCount ); meshBuilder.Begin( m_pMesh, MATERIAL_QUADS, meshCount );
@ -734,6 +743,8 @@ void CTouchControls::AddButton( const char *name, const char *texturefile, const
CTouchTexture *texture = new CTouchTexture; CTouchTexture *texture = new CTouchTexture;
btn->texture = texture; btn->texture = texture;
texture->isInAtlas = false;
texture->X0 = 0; texture->X1 = 0; texture->Y0 = 0; texture->Y1 = 0;
Q_strncpy( texture->szName, btn->texturefile, sizeof(btn->texturefile) ); Q_strncpy( texture->szName, btn->texturefile, sizeof(btn->texturefile) );
textureList.AddToTail(texture); textureList.AddToTail(texture);

View File

@ -83,6 +83,7 @@ struct CTouchTexture
float X0, Y0, X1, Y1; // position in atlas texture float X0, Y0, X1, Y1; // position in atlas texture
int height, width; int height, width;
bool isInAtlas;
char szName[1024]; char szName[1024];
}; };

2
lib

@ -1 +1 @@
Subproject commit 9ffeba566ef076b829041f19f015155e21f325ed Subproject commit 86a66ee92d9fda0a09f54a435e850faa7ab5d0fa