Properly delete entity skins on context lost. So now the game should completely handle context lost/restore on webgl/opengl es backends.

This commit is contained in:
UnknownShadow200 2020-06-27 09:32:10 +10:00
parent 0690c91865
commit 03030afe8a

View File

@ -617,15 +617,14 @@ static void Entities_ContextLost(void* obj) {
Entity_ContextLost(Entities.List[i]); Entity_ContextLost(Entities.List[i]);
} }
Gfx_DeleteTexture(&ShadowComponent_ShadowTex); Gfx_DeleteTexture(&ShadowComponent_ShadowTex);
}
static void Entities_ContextRecreated(void* obj) { if (Gfx.ManagedTextures) return;
int i;
for (i = 0; i < ENTITIES_MAX_COUNT; i++) { for (i = 0; i < ENTITIES_MAX_COUNT; i++) {
if (!Entities.List[i]) continue; if (!Entities.List[i]) continue;
/* name redraw is deferred until rendered */ DeleteSkin(Entities.List[i]);
} }
} }
/* No OnContextCreated, names/skin textures remade when needed */
static void Entities_ChatFontChanged(void* obj) { static void Entities_ChatFontChanged(void* obj) {
int i; int i;
@ -1127,14 +1126,12 @@ void NetPlayer_Init(struct NetPlayer* p) {
} }
/*########################################################################################################################* /*########################################################################################################################*
*---------------------------------------------------Entities component----------------------------------------------------* *---------------------------------------------------Entities component----------------------------------------------------*
*#########################################################################################################################*/ *#########################################################################################################################*/
static void Entities_Init(void) { static void Entities_Init(void) {
Event_RegisterVoid(&GfxEvents.ContextLost, NULL, Entities_ContextLost); Event_RegisterVoid(&GfxEvents.ContextLost, NULL, Entities_ContextLost);
Event_RegisterVoid(&GfxEvents.ContextRecreated, NULL, Entities_ContextRecreated); Event_RegisterVoid(&ChatEvents.FontChanged, NULL, Entities_ChatFontChanged);
Event_RegisterVoid(&ChatEvents.FontChanged, NULL, Entities_ChatFontChanged);
Entities.NamesMode = Options_GetEnum(OPT_NAMES_MODE, NAME_MODE_HOVERED, Entities.NamesMode = Options_GetEnum(OPT_NAMES_MODE, NAME_MODE_HOVERED,
NameMode_Names, Array_Elems(NameMode_Names)); NameMode_Names, Array_Elems(NameMode_Names));
@ -1155,13 +1152,9 @@ static void Entities_Free(void) {
Entities_Remove((EntityID)i); Entities_Remove((EntityID)i);
} }
Event_UnregisterVoid(&GfxEvents.ContextLost, NULL, Entities_ContextLost); Event_UnregisterVoid(&GfxEvents.ContextLost, NULL, Entities_ContextLost);
Event_UnregisterVoid(&GfxEvents.ContextRecreated, NULL, Entities_ContextRecreated); Event_UnregisterVoid(&ChatEvents.FontChanged, NULL, Entities_ChatFontChanged);
Event_UnregisterVoid(&ChatEvents.FontChanged, NULL, Entities_ChatFontChanged); Gfx_DeleteTexture(&ShadowComponent_ShadowTex);
if (ShadowComponent_ShadowTex) {
Gfx_DeleteTexture(&ShadowComponent_ShadowTex);
}
} }
struct IGameComponent Entities_Component = { struct IGameComponent Entities_Component = {