From 3849cb86231ce24131a86e9c29795a8cf3706a3d Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Sun, 29 Mar 2015 13:02:45 +0200 Subject: [PATCH] - added precaching of textures via MAPINFO. --- src/g_level.h | 1 + src/g_mapinfo.cpp | 19 +++++++++++++++++++ src/textures/texturemanager.cpp | 6 ++++++ 3 files changed, 26 insertions(+) diff --git a/src/g_level.h b/src/g_level.h index 8a47026398..f94fefa42e 100644 --- a/src/g_level.h +++ b/src/g_level.h @@ -336,6 +336,7 @@ struct level_info_t TArray specialactions; TArray PrecacheSounds; + TArray PrecacheTextures; level_info_t() { diff --git a/src/g_mapinfo.cpp b/src/g_mapinfo.cpp index 6d49b9c177..306c3645a0 100644 --- a/src/g_mapinfo.cpp +++ b/src/g_mapinfo.cpp @@ -1065,6 +1065,25 @@ DEFINE_MAP_OPTION(PrecacheSounds, true) } while (parse.sc.CheckString(",")); } +DEFINE_MAP_OPTION(PrecacheTextures, true) +{ + parse.ParseAssign(); + + do + { + parse.sc.MustGetString(); + FTextureID tex = TexMan.CheckForTexture(parse.sc.String, FTexture::TEX_Wall, FTextureManager::TEXMAN_Overridable|FTextureManager::TEXMAN_TryAny|FTextureManager::TEXMAN_ReturnFirst); + if (!tex.isValid()) + { + parse.sc.ScriptMessage("Unknown texture \"%s\"", parse.sc.String); + } + else + { + info->PrecacheTextures.Push(tex); + } + } while (parse.sc.CheckString(",")); +} + DEFINE_MAP_OPTION(redirect, true) { parse.ParseAssign(); diff --git a/src/textures/texturemanager.cpp b/src/textures/texturemanager.cpp index b8256bc651..be0426e984 100644 --- a/src/textures/texturemanager.cpp +++ b/src/textures/texturemanager.cpp @@ -1243,6 +1243,12 @@ void FTextureManager::PrecacheLevel (void) memset (hitlist, 0, cnt); screen->GetHitlist(hitlist); + + for (unsigned i = 0; i < level.info->PrecacheTextures.Size(); i++) + { + hitlist[level.info->PrecacheTextures[i].GetIndex()] |= 1; + } + for (int i = cnt - 1; i >= 0; i--) { Renderer->PrecacheTexture(ByIndex(i), hitlist[i]);