From d24e84720480a56d44acbff837d288c69fb3a28b Mon Sep 17 00:00:00 2001 From: Jan Date: Tue, 28 Dec 2021 18:26:41 +0100 Subject: [PATCH] Add command line argument for disable menu optimizations on loading --- src/Linker/LinkerArgs.cpp | 12 +++++++++++- .../IW4/AssetLoaders/AssetLoaderMenuList.cpp | 5 ++--- .../Game/IW4/Menu/MenuConverterIW4.cpp | 18 +++++++++--------- .../Game/IW4/Menu/MenuConverterIW4.h | 4 ++-- src/ObjLoading/Menu/AbstractMenuConverter.cpp | 4 ++-- src/ObjLoading/Menu/AbstractMenuConverter.h | 4 ++-- src/ObjLoading/ObjLoading.h | 3 ++- 7 files changed, 30 insertions(+), 20 deletions(-) diff --git a/src/Linker/LinkerArgs.cpp b/src/Linker/LinkerArgs.cpp index 5c4aa7ee..4c78d7bc 100644 --- a/src/Linker/LinkerArgs.cpp +++ b/src/Linker/LinkerArgs.cpp @@ -76,6 +76,12 @@ const CommandLineOption* const OPTION_MENU_PERMISSIVE = .WithDescription("Allows the usage of unknown script commands that can be compiled.") .Build(); +const CommandLineOption* const OPTION_MENU_NO_OPTIMIZATION = + CommandLineOption::Builder::Create() + .WithLongName("menu-no-optimization") + .WithDescription("Refrain from applying optimizations to parsed menus. (Optimizations increase menu performance and size. May result in less source information when dumped though.)") + .Build(); + const CommandLineOption* const COMMAND_LINE_OPTIONS[] { OPTION_HELP, @@ -266,7 +272,11 @@ bool LinkerArgs::ParseArgs(const int argc, const char** argv) // --menu-permissive if (m_argument_parser.IsOptionSpecified(OPTION_MENU_PERMISSIVE)) - ObjLoading::Configuration.PermissiveMenuParsing = true; + ObjLoading::Configuration.MenuPermissiveParsing = true; + + // --menu-no-optimization + if (m_argument_parser.IsOptionSpecified(OPTION_MENU_NO_OPTIMIZATION)) + ObjLoading::Configuration.MenuNoOptimization = true; return true; } diff --git a/src/ObjLoading/Game/IW4/AssetLoaders/AssetLoaderMenuList.cpp b/src/ObjLoading/Game/IW4/AssetLoaders/AssetLoaderMenuList.cpp index 73a23d68..c5842988 100644 --- a/src/ObjLoading/Game/IW4/AssetLoaders/AssetLoaderMenuList.cpp +++ b/src/ObjLoading/Game/IW4/AssetLoaders/AssetLoaderMenuList.cpp @@ -75,8 +75,7 @@ bool AssetLoaderMenuList::ProcessParsedResults(const std::string& assetName, ISe for (const auto& menu : parsingResult->m_menus) { - // TODO: Use command line arguments to activate legacy mode - MenuConverter converter(false, searchPath, memory, manager); + MenuConverter converter(ObjLoading::Configuration.MenuNoOptimization, searchPath, memory, manager); auto* menuAsset = converter.ConvertMenu(*menu); if(menuAsset == nullptr) { @@ -143,7 +142,7 @@ bool AssetLoaderMenuList::LoadFromRaw(const std::string& assetName, ISearchPath* }); reader.IncludeZoneState(zoneState); - reader.SetPermissiveMode(ObjLoading::Configuration.PermissiveMenuParsing); + reader.SetPermissiveMode(ObjLoading::Configuration.MenuPermissiveParsing); const auto menuFileResult = reader.ReadMenuFile(); if (menuFileResult) diff --git a/src/ObjLoading/Game/IW4/Menu/MenuConverterIW4.cpp b/src/ObjLoading/Game/IW4/Menu/MenuConverterIW4.cpp index 62320e6b..6b5617e7 100644 --- a/src/ObjLoading/Game/IW4/Menu/MenuConverterIW4.cpp +++ b/src/ObjLoading/Game/IW4/Menu/MenuConverterIW4.cpp @@ -268,7 +268,7 @@ namespace IW4 void ConvertExpressionEntry(std::vector& entries, const ISimpleExpression* expression, const CommonMenuDef* menu, const CommonItemDef* item) const { - if (!m_legacy_mode && expression->IsStatic()) + if (!m_disable_optimizations && expression->IsStatic()) { const auto expressionStaticValue = expression->Evaluate(); ConvertExpressionEntryExpressionValue(entries, &expressionStaticValue); @@ -327,7 +327,7 @@ namespace IW4 _NODISCARD Statement_s* ConvertOrApplyStatement(float& staticValue, const ISimpleExpression* expression, const CommonMenuDef* menu, const CommonItemDef* item = nullptr) const { - if (m_legacy_mode) + if (m_disable_optimizations) return ConvertExpression(expression, menu, item); if (!expression) @@ -355,7 +355,7 @@ namespace IW4 _NODISCARD Statement_s* ConvertOrApplyStatement(const char*& staticValue, const ISimpleExpression* expression, const CommonMenuDef* menu, const CommonItemDef* item = nullptr) const { - if (m_legacy_mode) + if (m_disable_optimizations) return ConvertExpression(expression, menu, item); if (!expression) @@ -382,7 +382,7 @@ namespace IW4 _NODISCARD Statement_s* ConvertOrApplyStatement(Material*& staticValue, const ISimpleExpression* expression, const CommonMenuDef* menu, const CommonItemDef* item = nullptr) const { - if (m_legacy_mode) + if (m_disable_optimizations) return ConvertExpression(expression, menu, item); if (!expression) @@ -645,8 +645,8 @@ namespace IW4 } public: - MenuConverterImpl(const bool legacyMode, ISearchPath* searchPath, MemoryManager* memory, IAssetLoadingManager* manager) - : AbstractMenuConverter(legacyMode, searchPath, memory, manager) + MenuConverterImpl(const bool disableOptimizations, ISearchPath* searchPath, MemoryManager* memory, IAssetLoadingManager* manager) + : AbstractMenuConverter(disableOptimizations, searchPath, memory, manager) { } @@ -705,8 +705,8 @@ namespace IW4 }; } -MenuConverter::MenuConverter(const bool legacyMode, ISearchPath* searchPath, MemoryManager* memory, IAssetLoadingManager* manager) - : m_legacy_mode(legacyMode), +MenuConverter::MenuConverter(const bool disableOptimizations, ISearchPath* searchPath, MemoryManager* memory, IAssetLoadingManager* manager) + : m_disable_optimizations(disableOptimizations), m_search_path(searchPath), m_memory(memory), m_manager(manager) @@ -720,7 +720,7 @@ std::vector& MenuConverter::GetDependencies() menuDef_t* MenuConverter::ConvertMenu(const CommonMenuDef& commonMenu) { - MenuConverterImpl impl(m_legacy_mode, m_search_path, m_memory, m_manager); + MenuConverterImpl impl(m_disable_optimizations, m_search_path, m_memory, m_manager); try { diff --git a/src/ObjLoading/Game/IW4/Menu/MenuConverterIW4.h b/src/ObjLoading/Game/IW4/Menu/MenuConverterIW4.h index e9fcef13..9dbdcb80 100644 --- a/src/ObjLoading/Game/IW4/Menu/MenuConverterIW4.h +++ b/src/ObjLoading/Game/IW4/Menu/MenuConverterIW4.h @@ -11,14 +11,14 @@ namespace IW4 { class MenuConverter { - bool m_legacy_mode; + bool m_disable_optimizations; ISearchPath* m_search_path; MemoryManager* m_memory; IAssetLoadingManager* m_manager; std::vector m_dependencies; public: - MenuConverter(bool legacyMode, ISearchPath* searchPath, MemoryManager* memory, IAssetLoadingManager* manager); + MenuConverter(bool disableOptimizations, ISearchPath* searchPath, MemoryManager* memory, IAssetLoadingManager* manager); std::vector& GetDependencies(); _NODISCARD menuDef_t* ConvertMenu(const menu::CommonMenuDef& commonMenu); diff --git a/src/ObjLoading/Menu/AbstractMenuConverter.cpp b/src/ObjLoading/Menu/AbstractMenuConverter.cpp index 03f4363b..0b05d76f 100644 --- a/src/ObjLoading/Menu/AbstractMenuConverter.cpp +++ b/src/ObjLoading/Menu/AbstractMenuConverter.cpp @@ -4,8 +4,8 @@ using namespace menu; -AbstractMenuConverter::AbstractMenuConverter(const bool legacyMode, ISearchPath* searchPath, MemoryManager* memory, IAssetLoadingManager* manager) - : m_legacy_mode(legacyMode), +AbstractMenuConverter::AbstractMenuConverter(const bool disableOptimizations, ISearchPath* searchPath, MemoryManager* memory, IAssetLoadingManager* manager) + : m_disable_optimizations(disableOptimizations), m_search_path(searchPath), m_memory(memory), m_manager(manager) diff --git a/src/ObjLoading/Menu/AbstractMenuConverter.h b/src/ObjLoading/Menu/AbstractMenuConverter.h index 3684cac8..c8236950 100644 --- a/src/ObjLoading/Menu/AbstractMenuConverter.h +++ b/src/ObjLoading/Menu/AbstractMenuConverter.h @@ -11,12 +11,12 @@ namespace menu class AbstractMenuConverter { protected: - bool m_legacy_mode; + bool m_disable_optimizations; ISearchPath* m_search_path; MemoryManager* m_memory; IAssetLoadingManager* m_manager; - AbstractMenuConverter(bool legacyMode, ISearchPath* searchPath, MemoryManager* memory, IAssetLoadingManager* manager); + AbstractMenuConverter(bool disableOptimizations, ISearchPath* searchPath, MemoryManager* memory, IAssetLoadingManager* manager); _NODISCARD const char* ConvertString(const std::string& str) const; diff --git a/src/ObjLoading/ObjLoading.h b/src/ObjLoading/ObjLoading.h index 68bf0e8c..c66b716e 100644 --- a/src/ObjLoading/ObjLoading.h +++ b/src/ObjLoading/ObjLoading.h @@ -12,7 +12,8 @@ public: { public: bool Verbose = false; - bool PermissiveMenuParsing = false; + bool MenuPermissiveParsing = false; + bool MenuNoOptimization = false; } Configuration; /**