From 0c748cb13b9eee76674ef72fa4751590ee223956 Mon Sep 17 00:00:00 2001 From: Thomas Debesse Date: Sat, 14 Jul 2018 22:33:10 +0200 Subject: [PATCH] load notex textures from a builtin vfs - allow gamepack to override it (example: smokinguns has custom ones) - it's not required anymore to compute paths from bitmaps from them - we can use textures/radian/notex as a default texture (and we need to) --- include/defaults.h | 33 ++++++++++++++++++ include/ishaders.h | 2 -- libs/shaderlib.h | 2 +- plugins/shaders/shaders.cpp | 7 ++-- radiant/qe3.cpp | 6 ++++ radiant/texwindow.cpp | 23 ++++++------ .../textures/radiant}/notex.png | Bin .../textures/radiant}/shadernotex.png | Bin 8 files changed, 54 insertions(+), 19 deletions(-) create mode 100644 include/defaults.h rename setup/data/tools/{bitmaps => base/textures/radiant}/notex.png (100%) rename setup/data/tools/{bitmaps => base/textures/radiant}/shadernotex.png (100%) diff --git a/include/defaults.h b/include/defaults.h new file mode 100644 index 00000000..96cb2411 --- /dev/null +++ b/include/defaults.h @@ -0,0 +1,33 @@ +/* + Copyright (C) 1999-2006 Id Software, Inc. and contributors. + For a list of contributors, see the accompanying CONTRIBUTORS file. + + This file is part of GtkRadiant. + + GtkRadiant is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + GtkRadiant is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GtkRadiant; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#if !defined( INCLUDED_DEFAULTS_H ) +#define INCLUDED_DEFAULTS_H + +#define DEFAULT_EDITORVFS_DIRNAME "base/" +#define DEFAULT_TEXTURE_DIRNAME "textures/" +#define DEFAULT_NOTEX_DIRNAME DEFAULT_TEXTURE_DIRNAME "radiant/" +#define DEFAULT_NOTEX_BASENAME "notex" +#define DEFAULT_SHADERNOTEX_BASENAME "shadernotex" +#define DEFAULT_NOTEX_NAME DEFAULT_NOTEX_DIRNAME DEFAULT_NOTEX_BASENAME +#define DEFAULT_SHADERNOTEX_NAME DEFAULT_NOTEX_DIRNAME DEFAULT_SHADERNOTEX_BASENAME + +#endif // INCLUDED_DEFAULTS_H diff --git a/include/ishaders.h b/include/ishaders.h index f88c8ce7..f588c287 100644 --- a/include/ishaders.h +++ b/include/ishaders.h @@ -80,7 +80,6 @@ virtual float alphaTest() const = 0; typedef Callback ShaderLayerCallback; - class IShader { public: @@ -183,7 +182,6 @@ inline ShaderSystem& GlobalShaderSystem(){ return GlobalShadersModule::getTable(); } - #define QERApp_Shader_ForName GlobalShaderSystem().getShaderForName #define QERApp_ActiveShaders_IteratorBegin GlobalShaderSystem().beginActiveShadersIterator #define QERApp_ActiveShaders_IteratorAtEnd GlobalShaderSystem().endActiveShadersIterator diff --git a/libs/shaderlib.h b/libs/shaderlib.h index ee972437..60c906a3 100644 --- a/libs/shaderlib.h +++ b/libs/shaderlib.h @@ -22,6 +22,7 @@ #if !defined ( INCLUDED_SHADERLIB_H ) #define INCLUDED_SHADERLIB_H +#include "defaults.h" #include "string/string.h" #include "character.h" #include "ishaders.h" @@ -80,5 +81,4 @@ inline const char* texdef_name_default(){ return GlobalTexturePrefix_get(); } - #endif diff --git a/plugins/shaders/shaders.cpp b/plugins/shaders/shaders.cpp index 99dac811..0f0de908 100644 --- a/plugins/shaders/shaders.cpp +++ b/plugins/shaders/shaders.cpp @@ -34,6 +34,7 @@ // Leonardo Zide (leo@lokigames.com) // +#include "defaults.h" #include "shaders.h" #include "globaldefs.h" @@ -76,7 +77,7 @@ bool g_enableDefaultShaders = true; ShaderLanguage g_shaderLanguage = SHADERLANGUAGE_QUAKE3; bool g_useShaderList = true; _QERPlugImageTable *g_bitmapModule = 0; -const char *g_texturePrefix = "textures/"; +const char *g_texturePrefix = DEFAULT_TEXTURE_DIRNAME; void ActiveShaders_IteratorBegin(); @@ -995,9 +996,7 @@ public: m_notfound = m_pTexture; { - StringOutputStream name(256); - name << GlobalRadiant().getAppPath() << "bitmaps/" << (IsDefault() ? "notex.png" : "shadernotex.png"); - m_pTexture = GlobalTexturesCache().capture(LoadImageCallback(0, loadBitmap), name.c_str()); + m_pTexture = GlobalTexturesCache().capture(IsDefault() ? DEFAULT_NOTEX_NAME : DEFAULT_SHADERNOTEX_NAME); } } diff --git a/radiant/qe3.cpp b/radiant/qe3.cpp index 789cdf16..af0f8f93 100644 --- a/radiant/qe3.cpp +++ b/radiant/qe3.cpp @@ -32,6 +32,7 @@ // Leonardo Zide (leo@lokigames.com) // +#include "defaults.h" #include "qe3.h" #include "globaldefs.h" @@ -84,6 +85,11 @@ void QE_InitVFS() const char *userRoot = g_qeglobals.m_userEnginePath.c_str(); const char *globalRoot = EnginePath_get(); + // editor builtin VFS + StringOutputStream editorGamePath(256); + editorGamePath << GlobalRadiant().getAppPath() << DEFAULT_EDITORVFS_DIRNAME; + GlobalFileSystem().initDirectory(editorGamePath.c_str()); + // if we have a mod dir if (!string_equal(gamename, basegame)) { // ~/./ diff --git a/radiant/texwindow.cpp b/radiant/texwindow.cpp index d088c0da..51903700 100644 --- a/radiant/texwindow.cpp +++ b/radiant/texwindow.cpp @@ -31,7 +31,8 @@ #include "debugging/debugging.h" #include "warnings.h" - + +#include "defaults.h" #include "ifilesystem.h" #include "iundo.h" #include "igl.h" @@ -86,9 +87,6 @@ #include "shaders.h" #include "commands.h" -#define NOTEX_BASENAME "notex" -#define SHADERNOTEX_BASENAME "shadernotex" - bool TextureBrowser_showWads() { return !string_empty(g_pGameDescription->getKeyValue("show_wads")); @@ -145,10 +143,10 @@ bool isMissing(const char *name) bool isNotex(const char *name) { - if (string_equal_suffix(name, "/" NOTEX_BASENAME)) { + if (string_equal_suffix(name, "/" DEFAULT_NOTEX_BASENAME)) { return true; } - if (string_equal_suffix(name, "/" SHADERNOTEX_BASENAME)) { + if (string_equal_suffix(name, "/" DEFAULT_SHADERNOTEX_BASENAME)) { return true; } return false; @@ -2091,13 +2089,14 @@ void TextureBrowser_checkTagFile() void TextureBrowser_SetNotex() { - StringOutputStream name(256); - name << GlobalRadiant().getAppPath() << "bitmaps/" NOTEX_BASENAME ".png"; - g_notex = name.c_str(); + IShader *notex = QERApp_Shader_ForName(DEFAULT_NOTEX_NAME); + IShader *shadernotex = QERApp_Shader_ForName(DEFAULT_SHADERNOTEX_NAME); + + g_notex = notex->getTexture()->name; + g_shadernotex = shadernotex->getTexture()->name; - name = StringOutputStream(256); - name << GlobalRadiant().getAppPath() << "bitmaps/" SHADERNOTEX_BASENAME " .png"; - g_shadernotex = name.c_str(); + notex->DecRef(); + shadernotex->DecRef(); } ui::Widget TextureBrowser_constructWindow(ui::Window toplevel) diff --git a/setup/data/tools/bitmaps/notex.png b/setup/data/tools/base/textures/radiant/notex.png similarity index 100% rename from setup/data/tools/bitmaps/notex.png rename to setup/data/tools/base/textures/radiant/notex.png diff --git a/setup/data/tools/bitmaps/shadernotex.png b/setup/data/tools/base/textures/radiant/shadernotex.png similarity index 100% rename from setup/data/tools/bitmaps/shadernotex.png rename to setup/data/tools/base/textures/radiant/shadernotex.png -- 2.39.2