mirror of
https://github.com/nillerusr/source-engine.git
synced 2024-12-22 06:06:50 +00:00
game(client): fix atlas generation for touch
This commit is contained in:
parent
d2f789853d
commit
a7611c481e
@ -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);
|
||||||
|
|
||||||
|
@ -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
2
lib
@ -1 +1 @@
|
|||||||
Subproject commit 9ffeba566ef076b829041f19f015155e21f325ed
|
Subproject commit 86a66ee92d9fda0a09f54a435e850faa7ab5d0fa
|
Loading…
Reference in New Issue
Block a user