Index: source/graphics/TextureManager.h =================================================================== --- source/graphics/TextureManager.h +++ source/graphics/TextureManager.h @@ -112,6 +112,12 @@ bool GenerateCachedTexture(const VfsPath& path, VfsPath& outputPath); /** + * Returns true if the given texture exists. + * This tests both for the original and converted filename. + */ + bool TextureExists(const VfsPath& path); + + /** * Returns total number of bytes uploaded for all current texture. */ size_t GetBytesUploaded() const; Index: source/graphics/TextureManager.cpp =================================================================== --- source/graphics/TextureManager.cpp +++ source/graphics/TextureManager.cpp @@ -316,6 +316,12 @@ m_TextureConverter.ConvertTexture(texture, sourcePath, looseCachePath, settings); } + bool TextureExists(const VfsPath& path) + { + return m_VFS->GetFileInfo(m_CacheLoader.ArchiveCachePath(path), 0) == INFO::OK || + m_VFS->GetFileInfo(path, 0) == INFO::OK; + } + bool GenerateCachedTexture(const VfsPath& sourcePath, VfsPath& archiveCachePath) { archiveCachePath = m_CacheLoader.ArchiveCachePath(sourcePath); @@ -653,6 +659,11 @@ return m->CreateTexture(props); } +bool CTextureManager::TextureExists(const VfsPath& path) +{ + return m->TextureExists(path); +} + CTexturePtr CTextureManager::GetErrorTexture() { return m->GetErrorTexture(); Index: source/renderer/scripting/JSInterface_Renderer.h =================================================================== --- source/renderer/scripting/JSInterface_Renderer.h +++ source/renderer/scripting/JSInterface_Renderer.h @@ -29,6 +29,7 @@ std::string GetRenderPath(ScriptInterface::CxPrivate* pCxPrivate); void SetRenderPath(ScriptInterface::CxPrivate* pCxPrivate, const std::string& name); void RecreateShadowMap(ScriptInterface::CxPrivate* pCxPrivate); + bool TextureExists(ScriptInterface::CxPrivate* pCxPrivate, const std::wstring& filename); DECLARE_BOOLEAN_SCRIPT_SETTING(Shadows); DECLARE_BOOLEAN_SCRIPT_SETTING(ShadowPCF); Index: source/renderer/scripting/JSInterface_Renderer.cpp =================================================================== --- source/renderer/scripting/JSInterface_Renderer.cpp +++ source/renderer/scripting/JSInterface_Renderer.cpp @@ -19,6 +19,8 @@ #include "JSInterface_Renderer.h" +#include "graphics/TextureManager.h" +#include "lib/file/vfs/vfs_path.h" #include "ps/Profile.h" #include "renderer/Renderer.h" #include "renderer/ShadowMap.h" @@ -69,6 +71,10 @@ g_Renderer.GetShadowMap().RecreateTexture(); } +bool JSI_Renderer::TextureExists(ScriptInterface::CxPrivate* UNUSED(pCxPrivate), const std::wstring& filename) +{ + return g_Renderer.GetTextureManager().TextureExists(filename); +} #define REGISTER_BOOLEAN_SCRIPT_SETTING(NAME) \ scriptInterface.RegisterFunction("Renderer_Get" #NAME "Enabled"); \ @@ -79,6 +85,7 @@ scriptInterface.RegisterFunction("Renderer_GetRenderPath"); scriptInterface.RegisterFunction("Renderer_SetRenderPath"); scriptInterface.RegisterFunction("Renderer_RecreateShadowMap"); + scriptInterface.RegisterFunction("TextureExists"); REGISTER_BOOLEAN_SCRIPT_SETTING(Shadows); REGISTER_BOOLEAN_SCRIPT_SETTING(ShadowPCF); REGISTER_BOOLEAN_SCRIPT_SETTING(Particles);