rt: recreate sprite model on every map
This is a workaround for inconsistent memory management: some subsystems completely clear their memories and start allocating from zero. This leads to overwriting long lived sprite model with garbage. TODO FIXME
This commit is contained in:
parent
8b50ebb035
commit
dd8f06ae60
|
@ -127,6 +127,8 @@ static void loadBrushModels( void ) {
|
|||
static void loadMap(const model_t* const map) {
|
||||
mapLoadBegin(map);
|
||||
|
||||
R_SpriteNewMapFIXME();
|
||||
|
||||
// Load light entities and patch data prior to loading map brush model
|
||||
XVK_ParseMapEntities();
|
||||
|
||||
|
|
|
@ -113,18 +113,31 @@ static qboolean createQuadModel(void) {
|
|||
});
|
||||
}
|
||||
|
||||
qboolean R_SpriteInit(void) {
|
||||
R_SpeedsRegisterMetric(&g_sprite.stats.sprites, "sprites_count", kSpeedsMetricCount);
|
||||
|
||||
return createQuadModel();
|
||||
}
|
||||
|
||||
void R_SpriteShutdown(void) {
|
||||
static void destroyQuadModel(void) {
|
||||
if (g_sprite.quad.model.num_geometries)
|
||||
VK_RenderModelDestroy(&g_sprite.quad.model);
|
||||
|
||||
if (g_sprite.quad.geom.block_handle.size)
|
||||
R_GeometryRangeFree(&g_sprite.quad.geom);
|
||||
|
||||
g_sprite.quad.model.num_geometries = 0;
|
||||
g_sprite.quad.geom.block_handle.size = 0;
|
||||
}
|
||||
|
||||
qboolean R_SpriteInit(void) {
|
||||
R_SpeedsRegisterMetric(&g_sprite.stats.sprites, "sprites_count", kSpeedsMetricCount);
|
||||
|
||||
return true;
|
||||
//return createQuadModel();
|
||||
}
|
||||
|
||||
void R_SpriteShutdown(void) {
|
||||
destroyQuadModel();
|
||||
}
|
||||
|
||||
void R_SpriteNewMapFIXME(void) {
|
||||
destroyQuadModel();
|
||||
ASSERT(createQuadModel());
|
||||
}
|
||||
|
||||
static mspriteframe_t *R_GetSpriteFrame( const model_t *pModel, int frame, float yaw )
|
||||
|
|
|
@ -11,3 +11,6 @@ void R_VkSpriteDrawModel( cl_entity_t *e, float blend );
|
|||
|
||||
qboolean R_SpriteInit(void);
|
||||
void R_SpriteShutdown(void);
|
||||
|
||||
// FIXME needed to recreate the sprite quad model, otherwise its memory will be freed, reused and corrupted
|
||||
void R_SpriteNewMapFIXME(void);
|
||||
|
|
Loading…
Reference in New Issue