From 03030afe8a73d9f91d38e85c1ab6ab0a154d56b1 Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Sat, 27 Jun 2020 09:32:10 +1000 Subject: [PATCH] Properly delete entity skins on context lost. So now the game should completely handle context lost/restore on webgl/opengl es backends. --- src/Entity.c | 23 ++++++++--------------- 1 file changed, 8 insertions(+), 15 deletions(-) diff --git a/src/Entity.c b/src/Entity.c index 45bb0ddc9..2e4415e4c 100644 --- a/src/Entity.c +++ b/src/Entity.c @@ -617,15 +617,14 @@ static void Entities_ContextLost(void* obj) { Entity_ContextLost(Entities.List[i]); } Gfx_DeleteTexture(&ShadowComponent_ShadowTex); -} -static void Entities_ContextRecreated(void* obj) { - int i; + if (Gfx.ManagedTextures) return; for (i = 0; i < ENTITIES_MAX_COUNT; i++) { 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) { int i; @@ -1127,14 +1126,12 @@ void NetPlayer_Init(struct NetPlayer* p) { } - /*########################################################################################################################* *---------------------------------------------------Entities component----------------------------------------------------* *#########################################################################################################################*/ static void Entities_Init(void) { - Event_RegisterVoid(&GfxEvents.ContextLost, NULL, Entities_ContextLost); - Event_RegisterVoid(&GfxEvents.ContextRecreated, NULL, Entities_ContextRecreated); - Event_RegisterVoid(&ChatEvents.FontChanged, NULL, Entities_ChatFontChanged); + Event_RegisterVoid(&GfxEvents.ContextLost, NULL, Entities_ContextLost); + Event_RegisterVoid(&ChatEvents.FontChanged, NULL, Entities_ChatFontChanged); Entities.NamesMode = Options_GetEnum(OPT_NAMES_MODE, NAME_MODE_HOVERED, NameMode_Names, Array_Elems(NameMode_Names)); @@ -1155,13 +1152,9 @@ static void Entities_Free(void) { Entities_Remove((EntityID)i); } - Event_UnregisterVoid(&GfxEvents.ContextLost, NULL, Entities_ContextLost); - Event_UnregisterVoid(&GfxEvents.ContextRecreated, NULL, Entities_ContextRecreated); - Event_UnregisterVoid(&ChatEvents.FontChanged, NULL, Entities_ChatFontChanged); - - if (ShadowComponent_ShadowTex) { - Gfx_DeleteTexture(&ShadowComponent_ShadowTex); - } + Event_UnregisterVoid(&GfxEvents.ContextLost, NULL, Entities_ContextLost); + Event_UnregisterVoid(&ChatEvents.FontChanged, NULL, Entities_ChatFontChanged); + Gfx_DeleteTexture(&ShadowComponent_ShadowTex); } struct IGameComponent Entities_Component = {