From d714afbcdd8fd8ff8d657eab60fc47ec731d799b Mon Sep 17 00:00:00 2001 From: Jan Laupetin Date: Mon, 19 Jan 2026 22:13:12 +0000 Subject: [PATCH] chore: use CommonTechset instead of TechsetDefinition --- .../Game/IW4/Techset/TechsetConstantsIW4.h | 46 ++++++++------- .../Game/T6/Techset/TechsetConstantsT6.h | 14 +++-- src/ObjCommon/Techset/CommonTechset.cpp | 55 ++++++++++++----- src/ObjCommon/Techset/CommonTechset.h | 8 +++ .../Game/IW4/Material/CompilerMaterialIW4.cpp | 16 ++--- .../Game/IW4/Techset/CompilerTechsetIW4.cpp | 22 +++---- .../Game/IW4/Techset/CompilerTechsetIW4.h | 4 +- src/ObjCompiling/Game/T6/ObjCompilerT6.cpp | 2 + .../Game/T6/Techset/TechsetCompilerT6.cpp | 23 ++++++++ .../Game/T6/Techset/TechsetCompilerT6.h | 12 ++++ .../Techset/CommonTechniqueLoader.cpp | 1 + .../Techset/CommonTechniqueLoader.h | 12 ++++ .../Techset/CommonTechsetLoader.cpp | 49 +++++++++++++++ .../Techset/CommonTechsetLoader.h | 12 ++++ .../Sequence/TechniqueNoScopeSequences.cpp | 0 .../Sequence/TechniqueNoScopeSequences.h | 0 .../Sequence/TechniquePassScopeSequences.cpp | 0 .../Sequence/TechniquePassScopeSequences.h | 0 .../TechniqueShaderScopeSequences.cpp | 0 .../Sequence/TechniqueShaderScopeSequences.h | 0 .../Techset/Parsing/TechniqueFileParser.cpp | 0 .../Techset/Parsing/TechniqueFileParser.h | 0 .../Parsing/TechniqueFileParserState.cpp | 0 .../Parsing/TechniqueFileParserState.h | 4 +- .../Techset/Parsing/TechsetFileParser.cpp | 59 ++++++++++--------- .../Techset/Parsing/TechsetFileParser.h | 10 ++-- .../Parsing/TechsetFileParserState.cpp | 10 ++++ .../Techset/Parsing/TechsetFileParserState.h | 20 +++++++ ...nitionCache.cpp => CommonTechsetCache.cpp} | 6 +- src/ObjLoading/Techset/CommonTechsetCache.h | 21 +++++++ .../Parsing/TechsetFileParserState.cpp | 25 -------- .../Techset/Parsing/TechsetFileParserState.h | 22 ------- src/ObjLoading/Techset/TechsetDefinition.cpp | 31 ---------- src/ObjLoading/Techset/TechsetDefinition.h | 18 ------ .../Techset/TechsetDefinitionCache.h | 22 ------- src/ObjLoading/Techset/TechsetFileReader.cpp | 40 ------------- src/ObjLoading/Techset/TechsetFileReader.h | 25 -------- .../Game/IW4/Techset/TechsetDumperIW4.cpp | 5 +- .../Game/T5/Techset/TechsetDumperT5.cpp | 5 +- .../Game/T6/Techset/TechsetDumperT6.cpp | 8 +-- 40 files changed, 306 insertions(+), 301 deletions(-) create mode 100644 src/ObjCompiling/Game/T6/Techset/TechsetCompilerT6.cpp create mode 100644 src/ObjCompiling/Game/T6/Techset/TechsetCompilerT6.h create mode 100644 src/ObjCompiling/Techset/CommonTechniqueLoader.cpp create mode 100644 src/ObjCompiling/Techset/CommonTechniqueLoader.h create mode 100644 src/ObjCompiling/Techset/CommonTechsetLoader.cpp create mode 100644 src/ObjCompiling/Techset/CommonTechsetLoader.h rename src/{ObjLoading => ObjCompiling}/Techset/Parsing/Sequence/TechniqueNoScopeSequences.cpp (100%) rename src/{ObjLoading => ObjCompiling}/Techset/Parsing/Sequence/TechniqueNoScopeSequences.h (100%) rename src/{ObjLoading => ObjCompiling}/Techset/Parsing/Sequence/TechniquePassScopeSequences.cpp (100%) rename src/{ObjLoading => ObjCompiling}/Techset/Parsing/Sequence/TechniquePassScopeSequences.h (100%) rename src/{ObjLoading => ObjCompiling}/Techset/Parsing/Sequence/TechniqueShaderScopeSequences.cpp (100%) rename src/{ObjLoading => ObjCompiling}/Techset/Parsing/Sequence/TechniqueShaderScopeSequences.h (100%) rename src/{ObjLoading => ObjCompiling}/Techset/Parsing/TechniqueFileParser.cpp (100%) rename src/{ObjLoading => ObjCompiling}/Techset/Parsing/TechniqueFileParser.h (100%) rename src/{ObjLoading => ObjCompiling}/Techset/Parsing/TechniqueFileParserState.cpp (100%) rename src/{ObjLoading => ObjCompiling}/Techset/Parsing/TechniqueFileParserState.h (100%) rename src/{ObjLoading => ObjCompiling}/Techset/Parsing/TechsetFileParser.cpp (62%) rename src/{ObjLoading => ObjCompiling}/Techset/Parsing/TechsetFileParser.h (60%) create mode 100644 src/ObjCompiling/Techset/Parsing/TechsetFileParserState.cpp create mode 100644 src/ObjCompiling/Techset/Parsing/TechsetFileParserState.h rename src/ObjLoading/Techset/{TechsetDefinitionCache.cpp => CommonTechsetCache.cpp} (50%) create mode 100644 src/ObjLoading/Techset/CommonTechsetCache.h delete mode 100644 src/ObjLoading/Techset/Parsing/TechsetFileParserState.cpp delete mode 100644 src/ObjLoading/Techset/Parsing/TechsetFileParserState.h delete mode 100644 src/ObjLoading/Techset/TechsetDefinition.cpp delete mode 100644 src/ObjLoading/Techset/TechsetDefinition.h delete mode 100644 src/ObjLoading/Techset/TechsetDefinitionCache.h delete mode 100644 src/ObjLoading/Techset/TechsetFileReader.cpp delete mode 100644 src/ObjLoading/Techset/TechsetFileReader.h diff --git a/src/ObjCommon/Game/IW4/Techset/TechsetConstantsIW4.h b/src/ObjCommon/Game/IW4/Techset/TechsetConstantsIW4.h index 9b0a08d8..0f4f1a32 100644 --- a/src/ObjCommon/Game/IW4/Techset/TechsetConstantsIW4.h +++ b/src/ObjCommon/Game/IW4/Techset/TechsetConstantsIW4.h @@ -3,13 +3,14 @@ #include "Game/IW4/CommonIW4.h" #include "Game/IW4/IW4.h" #include "StateMap/StateMapLayout.h" +#include "Techset/CommonTechset.h" #include #include namespace IW4 { - inline const char* techniqueTypeNames[]{ + static inline const char* techniqueTypeNames[]{ "depth prepass", "build floatz", "build shadowmap depth", @@ -60,8 +61,9 @@ namespace IW4 "debug bumpmap instanced", }; static_assert(std::extent_v == TECHNIQUE_COUNT); + static inline techset::CommonTechniqueTypeNames commonTechniqueTypeNames(techniqueTypeNames, std::extent_v); - static const char* materialStreamDestinationNames[]{ + static inline const char* materialStreamDestinationNames[]{ "position", "normal", "color[0]", @@ -78,7 +80,7 @@ namespace IW4 }; static_assert(std::extent_v == STREAM_DST_COUNT); - static const char* materialStreamDestinationAbbreviation[]{ + static inline const char* materialStreamDestinationAbbreviation[]{ "p", "n", "c0", @@ -95,7 +97,7 @@ namespace IW4 }; static_assert(std::extent_v == STREAM_DST_COUNT); - static const char* materialStreamSourceNames[]{ + static inline const char* materialStreamSourceNames[]{ "position", "color", "texcoord[0]", @@ -108,7 +110,7 @@ namespace IW4 }; static_assert(std::extent_v == STREAM_SRC_COUNT); - static const char* materialStreamSourceAbbreviation[]{ + static inline const char* materialStreamSourceAbbreviation[]{ "p", "c", "t0", @@ -121,18 +123,18 @@ namespace IW4 }; static_assert(std::extent_v == STREAM_SRC_COUNT); - inline CodeSamplerSource s_lightmapSamplers[]{ + static inline CodeSamplerSource s_lightmapSamplers[]{ {"primary", TEXTURE_SRC_CODE_LIGHTMAP_PRIMARY, nullptr, 0, 0}, {"secondary", TEXTURE_SRC_CODE_LIGHTMAP_SECONDARY, nullptr, 0, 0}, {}, }; - inline CodeSamplerSource s_lightSamplers[]{ + static inline CodeSamplerSource s_lightSamplers[]{ {"attenuation", TEXTURE_SRC_CODE_LIGHT_ATTENUATION, nullptr, 0, 0}, {}, }; - inline CodeSamplerSource s_codeSamplers[]{ + static inline CodeSamplerSource s_codeSamplers[]{ {"white", TEXTURE_SRC_CODE_WHITE, nullptr, 0, 0}, {"black", TEXTURE_SRC_CODE_BLACK, nullptr, 0, 0}, {"identityNormalMap", TEXTURE_SRC_CODE_IDENTITY_NORMAL_MAP, nullptr, 0, 0}, @@ -155,7 +157,7 @@ namespace IW4 {}, }; - inline CodeSamplerSource s_defaultCodeSamplers[]{ + static inline CodeSamplerSource s_defaultCodeSamplers[]{ {"shadowmapSamplerSun", TEXTURE_SRC_CODE_SHADOWMAP_SUN, nullptr, 0, 0}, {"shadowmapSamplerSpot", TEXTURE_SRC_CODE_SHADOWMAP_SPOT, nullptr, 0, 0}, {"feedbackSampler", TEXTURE_SRC_CODE_FEEDBACK, nullptr, 0, 0}, @@ -177,7 +179,7 @@ namespace IW4 {}, }; - inline CodeConstantSource s_sunConsts[]{ + static inline CodeConstantSource s_sunConsts[]{ {"position", CONST_SRC_CODE_LIGHT_POSITION, nullptr, 0, 0}, {"diffuse", CONST_SRC_CODE_LIGHT_DIFFUSE, nullptr, 0, 0}, {"specular", CONST_SRC_CODE_LIGHT_SPECULAR, nullptr, 0, 0}, @@ -187,14 +189,14 @@ namespace IW4 {}, }; - inline CodeConstantSource s_nearPlaneConsts[]{ + static inline CodeConstantSource s_nearPlaneConsts[]{ {"org", CONST_SRC_CODE_NEARPLANE_ORG, nullptr, 0, 0}, {"dx", CONST_SRC_CODE_NEARPLANE_DX, nullptr, 0, 0}, {"dy", CONST_SRC_CODE_NEARPLANE_DY, nullptr, 0, 0}, {}, }; - inline CodeConstantSource s_codeConsts[]{ + static inline CodeConstantSource s_codeConsts[]{ {"nearPlane", CONST_SRC_NONE, s_nearPlaneConsts, 0, 0}, {"light", CONST_SRC_NONE, s_sunConsts, 0, 0}, {"baseLightingCoords", CONST_SRC_CODE_BASE_LIGHTING_COORDS, nullptr, 0, 0}, @@ -313,7 +315,7 @@ namespace IW4 {}, }; - inline CodeConstantSource s_defaultCodeConsts[]{ + static inline CodeConstantSource s_defaultCodeConsts[]{ {"nearPlaneOrg", CONST_SRC_CODE_NEARPLANE_ORG, nullptr, 0, 0}, {"nearPlaneDx", CONST_SRC_CODE_NEARPLANE_DX, nullptr, 0, 0}, {"nearPlaneDy", CONST_SRC_CODE_NEARPLANE_DY, nullptr, 0, 0}, @@ -328,7 +330,7 @@ namespace IW4 {}, }; - inline MaterialUpdateFrequency s_codeConstUpdateFreq[]{ + static inline MaterialUpdateFrequency s_codeConstUpdateFreq[]{ MTL_UPDATE_RARELY, // LIGHT_POSITION MTL_UPDATE_RARELY, // LIGHT_DIFFUSE MTL_UPDATE_RARELY, // LIGHT_SPECULAR @@ -464,7 +466,7 @@ namespace IW4 }; static_assert(std::extent_v == CONST_SRC_TOTAL_COUNT); - inline MaterialUpdateFrequency s_codeSamplerUpdateFreq[]{ + static inline MaterialUpdateFrequency s_codeSamplerUpdateFreq[]{ MTL_UPDATE_RARELY, // BLACK MTL_UPDATE_RARELY, // WHITE MTL_UPDATE_RARELY, // IDENTITY_NORMAL_MAP @@ -495,14 +497,14 @@ namespace IW4 }; static_assert(std::extent_v == TEXTURE_SRC_CODE_COUNT); - inline MaterialTextureSource g_customSamplerSrc[]{ + static inline MaterialTextureSource g_customSamplerSrc[]{ TEXTURE_SRC_CODE_REFLECTION_PROBE, // CUSTOM_SAMPLER_REFLECTION_PROBE TEXTURE_SRC_CODE_LIGHTMAP_PRIMARY, // CUSTOM_SAMPLER_LIGHTMAP_PRIMARY TEXTURE_SRC_CODE_LIGHTMAP_SECONDARY, // CUSTOM_SAMPLER_LIGHTMAP_SECONDARY }; static_assert(std::extent_v == CUSTOM_SAMPLER_COUNT); - inline MaterialTypeInfo g_materialTypeInfo[]{ + static inline MaterialTypeInfo g_materialTypeInfo[]{ {"", "" }, {"m/", "m_" }, {"mc/", "mc_"}, @@ -523,7 +525,7 @@ namespace IW4 return std::make_pair(Common::R_HashString(name, 0u), KnownMaterialTextureMap{name, additionalPropertySuffix}); } - inline std::unordered_map knownTextureMaps{ + static inline std::unordered_map knownTextureMaps{ MakeKnownTextureMap("colorMap", "Color"), MakeKnownTextureMap("colorMap0", "Color00"), MakeKnownTextureMap("colorMap1", "Color01"), @@ -538,7 +540,7 @@ namespace IW4 return std::make_pair(Common::R_HashString(name, 0u), name); } - inline std::unordered_map knownConstantNames{ + static inline std::unordered_map knownConstantNames{ MakeKnownConstantName("distortionScale"), MakeKnownConstantName("eyeOffsetParms"), MakeKnownConstantName("falloffBeginColor"), @@ -560,7 +562,7 @@ namespace IW4 WIREFRAME }; - inline state_map::StateMapLayoutEntries stateMapEntryLayout({ + static inline state_map::StateMapLayoutEntries stateMapEntryLayout({ {"alphaTest", 0, GFXS0_ATEST_MASK | GFXS0_ATEST_DISABLE, {"mtlAlphaTest"} }, {"blendFunc", 0, GFXS0_BLEND_RGB_MASK, {"mtlBlendOp", "mtlSrcBlend", "mtlDestBlend"} }, {"separateAlphaBlendFunc", 0, GFXS0_BLEND_ALPHA_MASK, {"mtlBlendOpAlpha", "mtlSrcBlendAlpha", "mtlDestBlendAlpha"}}, @@ -598,7 +600,7 @@ namespace IW4 } } }); - inline state_map::StateMapLayoutVars stateMapVarLayout({ + static inline state_map::StateMapLayoutVars stateMapVarLayout({ {"mtlAlphaTest", 0, { {"Always", GFXS0_ATEST_DISABLE}, @@ -818,5 +820,5 @@ namespace IW4 }}, }); - inline state_map::StateMapLayout stateMapLayout(std::extent_v, stateMapEntryLayout, stateMapVarLayout); + static inline state_map::StateMapLayout stateMapLayout(std::extent_v, stateMapEntryLayout, stateMapVarLayout); } // namespace IW4 diff --git a/src/ObjCommon/Game/T6/Techset/TechsetConstantsT6.h b/src/ObjCommon/Game/T6/Techset/TechsetConstantsT6.h index 4e773c3e..73569967 100644 --- a/src/ObjCommon/Game/T6/Techset/TechsetConstantsT6.h +++ b/src/ObjCommon/Game/T6/Techset/TechsetConstantsT6.h @@ -2,10 +2,11 @@ #include "Game/T6/T6.h" #include "Techset/CommonTechnique.h" +#include "Techset/CommonTechset.h" namespace T6 { - inline const char* techniqueTypeNames[]{ + static inline const char* techniqueTypeNames[]{ "depth prepass", "build shadowmap depth", "unlit", @@ -44,8 +45,9 @@ namespace T6 "debug performance", }; static_assert(std::extent_v == TECHNIQUE_COUNT); + static inline techset::CommonTechniqueTypeNames commonTechniqueTypeNames(techniqueTypeNames, std::extent_v); - static techset::CommonStreamRoutingSourceInfo streamRoutingSources[]{ + static inline techset::CommonStreamRoutingSourceInfo streamRoutingSources[]{ { .name = "position", .abbreviation = "p", @@ -104,7 +106,7 @@ namespace T6 }; static_assert(std::extent_v == STREAM_SRC_COUNT); - static techset::CommonStreamRoutingDestinationInfo streamRoutingDestinations[]{ + static inline techset::CommonStreamRoutingDestinationInfo streamRoutingDestinations[]{ { .name = "position", .abbreviation = "p", @@ -188,7 +190,7 @@ namespace T6 }; static_assert(std::extent_v == STREAM_DST_COUNT); - static techset::CommonCodeConstSourceInfo commonCodeConstSources[]{ + static inline techset::CommonCodeConstSourceInfo commonCodeConstSources[]{ { .value = CONST_SRC_CODE_LIGHT_POSITION, .accessor = "lightPosition", @@ -1511,7 +1513,7 @@ namespace T6 }, }; - static techset::CommonCodeSamplerSourceInfo commonCodeSamplerSources[]{ + static inline techset::CommonCodeSamplerSourceInfo commonCodeSamplerSources[]{ { .value = TEXTURE_SRC_CODE_BLACK, .accessor = "black", @@ -1789,7 +1791,7 @@ namespace T6 }, }; - inline MaterialTypeInfo g_materialTypeInfo[]{ + static inline MaterialTypeInfo g_materialTypeInfo[]{ {"", "" }, {"m/", "m_" }, {"mc/", "mc_" }, diff --git a/src/ObjCommon/Techset/CommonTechset.cpp b/src/ObjCommon/Techset/CommonTechset.cpp index 96bc0d3b..3d6ae765 100644 --- a/src/ObjCommon/Techset/CommonTechset.cpp +++ b/src/ObjCommon/Techset/CommonTechset.cpp @@ -2,21 +2,48 @@ #include -techset::CommonTechniqueTypeNames::CommonTechniqueTypeNames(const char** names, const size_t nameCount) - : m_names(nameCount) +namespace techset { - std::copy(names, &names[nameCount], m_names.data()); -} + CommonTechniqueTypeNames::CommonTechniqueTypeNames(const char** names, const size_t nameCount) + : m_names(nameCount) + { + std::copy(names, &names[nameCount], m_names.data()); -const char* techset::CommonTechniqueTypeNames::GetTechniqueTypeName(const size_t techniqueTypeIndex) const -{ - if (techniqueTypeIndex >= m_names.size()) - return nullptr; + m_technique_type_lookup.reserve(nameCount); + for (size_t i = 0; i < nameCount; i++) + m_technique_type_lookup.emplace(names[i], i); + } - return m_names[techniqueTypeIndex]; -} + const char* CommonTechniqueTypeNames::GetTechniqueTypeName(const size_t techniqueTypeIndex) const + { + if (techniqueTypeIndex >= m_names.size()) + return nullptr; -size_t techset::CommonTechniqueTypeNames::GetTechniqueTypeCount() const -{ - return m_names.size(); -} + return m_names[techniqueTypeIndex]; + } + + [[nodiscard]] std::optional CommonTechniqueTypeNames::GetTechniqueTypeByName(const std::string& name) const + { + const auto foundValue = m_technique_type_lookup.find(name); + if (foundValue != m_technique_type_lookup.end()) + return foundValue->second; + + return std::nullopt; + } + + size_t CommonTechniqueTypeNames::GetTechniqueTypeCount() const + { + return m_names.size(); + } + + CommonTechset::CommonTechset(const size_t techniqueTypeCount) + : m_technique_names(techniqueTypeCount) + { + } + + CommonTechset::CommonTechset(std::string name, std::vector techniqueNames) + : m_name(std::move(name)), + m_technique_names(std::move(techniqueNames)) + { + } +} // namespace techset diff --git a/src/ObjCommon/Techset/CommonTechset.h b/src/ObjCommon/Techset/CommonTechset.h index 5dd2c02e..e80d873d 100644 --- a/src/ObjCommon/Techset/CommonTechset.h +++ b/src/ObjCommon/Techset/CommonTechset.h @@ -1,7 +1,9 @@ #pragma once #include +#include #include +#include #include namespace techset @@ -12,15 +14,21 @@ namespace techset CommonTechniqueTypeNames(const char** names, size_t nameCount); [[nodiscard]] const char* GetTechniqueTypeName(size_t techniqueTypeIndex) const; + [[nodiscard]] std::optional GetTechniqueTypeByName(const std::string& name) const; [[nodiscard]] size_t GetTechniqueTypeCount() const; private: std::vector m_names; + std::unordered_map m_technique_type_lookup; }; class CommonTechset { public: + CommonTechset() = default; + explicit CommonTechset(size_t techniqueTypeCount); + CommonTechset(std::string name, std::vector techniqueNames); + std::string m_name; std::vector m_technique_names; }; diff --git a/src/ObjCompiling/Game/IW4/Material/CompilerMaterialIW4.cpp b/src/ObjCompiling/Game/IW4/Material/CompilerMaterialIW4.cpp index 1b2aad5f..fc756817 100644 --- a/src/ObjCompiling/Game/IW4/Material/CompilerMaterialIW4.cpp +++ b/src/ObjCompiling/Game/IW4/Material/CompilerMaterialIW4.cpp @@ -12,10 +12,10 @@ #include "Pool/GlobalAssetPool.h" #include "StateMap/StateMapFromTechniqueExtractor.h" #include "StateMap/StateMapHandler.h" +#include "Techset/CommonTechsetCache.h" #include "Techset/TechniqueFileReader.h" #include "Techset/TechniqueStateMapCache.h" #include "Techset/TechsetCommon.h" -#include "Techset/TechsetDefinitionCache.h" #include "Utils/Logging/Log.h" #include @@ -795,7 +795,7 @@ namespace m_registration.AddDependency(techset); m_material.techniqueSet = techset->Asset(); - auto& definitionCache = m_context.GetZoneAssetCreationState<::techset::TechsetDefinitionCache>(); + auto& definitionCache = m_context.GetZoneAssetCreationState<::techset::CommonTechsetCache>(); bool failure = false; const auto* techsetDefinition = m_techset_creator->LoadTechsetDefinition(techsetName, m_context, failure); @@ -808,12 +808,12 @@ namespace SetTechniqueSetCameraRegion(techsetDefinition); } - void SetTechniqueSetStateBits(const ::techset::TechsetDefinition* techsetDefinition) + void SetTechniqueSetStateBits(const techset::CommonTechset* commonTechset) { for (auto i = 0; i < TECHNIQUE_COUNT; i++) { - std::string techniqueName; - if (techsetDefinition->GetTechniqueByIndex(i, techniqueName)) + auto techniqueName = commonTechset->m_technique_names[i]; + if (!techniqueName.empty()) { const auto stateBitsForTechnique = GetStateBitsForTechnique(techniqueName); const auto foundStateBits = std::ranges::find_if(m_state_bits, @@ -892,17 +892,17 @@ namespace return outBits; } - void SetTechniqueSetCameraRegion(const ::techset::TechsetDefinition* techsetDefinition) const + void SetTechniqueSetCameraRegion(const techset::CommonTechset* commonTechset) const { std::string tempName; - if (techsetDefinition->GetTechniqueByIndex(TECHNIQUE_LIT, tempName)) + if (!commonTechset->m_technique_names[TECHNIQUE_LIT].empty()) { if (m_material.info.sortKey >= SORTKEY_TRANS_START) m_material.cameraRegion = CAMERA_REGION_LIT_TRANS; else m_material.cameraRegion = CAMERA_REGION_LIT_OPAQUE; } - else if (techsetDefinition->GetTechniqueByIndex(TECHNIQUE_EMISSIVE, tempName)) + else if (!commonTechset->m_technique_names[TECHNIQUE_EMISSIVE].empty()) { m_material.cameraRegion = CAMERA_REGION_EMISSIVE; } diff --git a/src/ObjCompiling/Game/IW4/Techset/CompilerTechsetIW4.cpp b/src/ObjCompiling/Game/IW4/Techset/CompilerTechsetIW4.cpp index ac775a8f..65e5f671 100644 --- a/src/ObjCompiling/Game/IW4/Techset/CompilerTechsetIW4.cpp +++ b/src/ObjCompiling/Game/IW4/Techset/CompilerTechsetIW4.cpp @@ -7,11 +7,11 @@ #include "Shader/D3D9ShaderAnalyser.h" #include "Shader/ShaderCommon.h" #include "StateMap/StateMapReader.h" +#include "Techset/CommonTechsetCache.h" +#include "Techset/CommonTechsetLoader.h" #include "Techset/TechniqueFileReader.h" #include "Techset/TechniqueStateMapCache.h" #include "Techset/TechsetCommon.h" -#include "Techset/TechsetDefinitionCache.h" -#include "Techset/TechsetFileReader.h" #include "Utils/Alignment.h" #include "Utils/Logging/Log.h" @@ -1284,7 +1284,7 @@ namespace } private: - AssetCreationResult CreateTechsetFromDefinition(const std::string& assetName, const TechsetDefinition& definition, AssetCreationContext& context) + AssetCreationResult CreateTechsetFromDefinition(const std::string& assetName, const CommonTechset& definition, AssetCreationContext& context) { auto* techset = m_memory.Alloc(); techset->name = m_memory.Dup(assetName.c_str()); @@ -1294,8 +1294,8 @@ namespace const TechniqueLoader techniqueLoader(m_search_path, m_memory, context, this); for (auto i = 0u; i < std::extent_v; i++) { - std::string techniqueName; - if (definition.GetTechniqueByIndex(i, techniqueName)) + const auto& techniqueName = definition.m_technique_names[i]; + if (!techniqueName.empty()) { auto* technique = techniqueLoader.LoadMaterialTechnique(techniqueName); @@ -1312,10 +1312,10 @@ namespace return AssetCreationResult::Success(context.AddAsset(std::move(registration))); } - TechsetDefinition* LoadTechsetDefinition(const std::string& assetName, AssetCreationContext& context, bool& failure) override + CommonTechset* LoadTechsetDefinition(const std::string& assetName, AssetCreationContext& context, bool& failure) override { failure = false; - auto& definitionCache = context.GetZoneAssetCreationState(); + auto& definitionCache = context.GetZoneAssetCreationState(); auto* cachedTechsetDefinition = definitionCache.GetCachedTechsetDefinition(assetName); if (cachedTechsetDefinition) return cachedTechsetDefinition; @@ -1325,17 +1325,13 @@ namespace if (!file.IsOpen()) return nullptr; - const TechsetFileReader reader(*file.m_stream, techsetFileName, techniqueTypeNames, std::extent_v); - auto techsetDefinition = reader.ReadTechsetDefinition(); + auto techsetDefinition = LoadCommonTechset(assetName, commonTechniqueTypeNames, m_search_path, failure); if (!techsetDefinition) - { - failure = true; return nullptr; - } auto* techsetDefinitionPtr = techsetDefinition.get(); - definitionCache.AddTechsetDefinitionToCache(assetName, std::move(techsetDefinition)); + definitionCache.AddCommonTechsetToCache(assetName, std::move(techsetDefinition)); return techsetDefinitionPtr; } diff --git a/src/ObjCompiling/Game/IW4/Techset/CompilerTechsetIW4.h b/src/ObjCompiling/Game/IW4/Techset/CompilerTechsetIW4.h index 09fd1375..b1dd340c 100644 --- a/src/ObjCompiling/Game/IW4/Techset/CompilerTechsetIW4.h +++ b/src/ObjCompiling/Game/IW4/Techset/CompilerTechsetIW4.h @@ -4,7 +4,7 @@ #include "Game/IW4/IW4.h" #include "SearchPath/ISearchPath.h" #include "StateMap/StateMapDefinition.h" -#include "Techset/TechsetDefinition.h" +#include "Techset/CommonTechset.h" #include "Utils/MemoryManager.h" #include @@ -18,7 +18,7 @@ namespace techset ICreatorIW4() = default; virtual ~ICreatorIW4() = default; - virtual TechsetDefinition* LoadTechsetDefinition(const std::string& assetName, AssetCreationContext& context, bool& failure) = 0; + virtual CommonTechset* LoadTechsetDefinition(const std::string& assetName, AssetCreationContext& context, bool& failure) = 0; virtual const state_map::StateMapDefinition* LoadStateMapDefinition(const std::string& stateMapName, AssetCreationContext& context) = 0; }; diff --git a/src/ObjCompiling/Game/T6/ObjCompilerT6.cpp b/src/ObjCompiling/Game/T6/ObjCompilerT6.cpp index 8228234d..d9681a32 100644 --- a/src/ObjCompiling/Game/T6/ObjCompilerT6.cpp +++ b/src/ObjCompiling/Game/T6/ObjCompilerT6.cpp @@ -4,6 +4,7 @@ #include "Image/ImageIPakPostProcessor.h" #include "Image/ImageIwdPostProcessor.h" #include "KeyValuePairs/KeyValuePairsCompilerT6.h" +#include "Techset/TechsetCompilerT6.h" #include @@ -20,6 +21,7 @@ namespace auto& memory = zone.Memory(); collection.AddAssetCreator(key_value_pairs::CreateCompilerT6(memory, zone, zoneDefinition.m_zone_definition, zoneStates)); + collection.AddAssetCreator(techset::CreateCompilerT6(memory, searchPath)); } void ConfigurePostProcessors(AssetCreatorCollection& collection, diff --git a/src/ObjCompiling/Game/T6/Techset/TechsetCompilerT6.cpp b/src/ObjCompiling/Game/T6/Techset/TechsetCompilerT6.cpp new file mode 100644 index 00000000..68882385 --- /dev/null +++ b/src/ObjCompiling/Game/T6/Techset/TechsetCompilerT6.cpp @@ -0,0 +1,23 @@ +#include "TechsetCompilerT6.h" + +#include "Game/T6/T6.h" + +namespace +{ + class TechsetCompilerT6 final : public AssetCreator + { + public: + AssetCreationResult CreateAsset(const std::string& assetName, AssetCreationContext& context) override + { + return AssetCreationResult::NoAction(); + } + }; +} // namespace + +namespace techset +{ + std::unique_ptr CreateCompilerT6(MemoryManager& memory, ISearchPath& searchPath) + { + return std::make_unique(); + } +} // namespace techset diff --git a/src/ObjCompiling/Game/T6/Techset/TechsetCompilerT6.h b/src/ObjCompiling/Game/T6/Techset/TechsetCompilerT6.h new file mode 100644 index 00000000..2af583f1 --- /dev/null +++ b/src/ObjCompiling/Game/T6/Techset/TechsetCompilerT6.h @@ -0,0 +1,12 @@ +#pragma once + +#include "Asset/IAssetCreator.h" +#include "SearchPath/ISearchPath.h" +#include "Utils/MemoryManager.h" + +#include + +namespace techset +{ + std::unique_ptr CreateCompilerT6(MemoryManager& memory, ISearchPath& searchPath); +} // namespace techset diff --git a/src/ObjCompiling/Techset/CommonTechniqueLoader.cpp b/src/ObjCompiling/Techset/CommonTechniqueLoader.cpp new file mode 100644 index 00000000..4def5bcc --- /dev/null +++ b/src/ObjCompiling/Techset/CommonTechniqueLoader.cpp @@ -0,0 +1 @@ +#include "CommonTechniqueLoader.h" diff --git a/src/ObjCompiling/Techset/CommonTechniqueLoader.h b/src/ObjCompiling/Techset/CommonTechniqueLoader.h new file mode 100644 index 00000000..70722720 --- /dev/null +++ b/src/ObjCompiling/Techset/CommonTechniqueLoader.h @@ -0,0 +1,12 @@ +#pragma once + +#include "Asset/AssetCreationContext.h" +#include "Techset/CommonTechnique.h" + +#include + +namespace techset +{ + std::unique_ptr + LoadCommonTechnique(const AssetCreationContext& context, const CommonCodeSourceInfos& codeSourceInfos, const CommonStreamRoutingInfos& routingInfos); +} // namespace techset diff --git a/src/ObjCompiling/Techset/CommonTechsetLoader.cpp b/src/ObjCompiling/Techset/CommonTechsetLoader.cpp new file mode 100644 index 00000000..34d54e11 --- /dev/null +++ b/src/ObjCompiling/Techset/CommonTechsetLoader.cpp @@ -0,0 +1,49 @@ +#include "CommonTechsetLoader.h" + +#include "Parsing/IParserLineStream.h" +#include "Parsing/Impl/CommentRemovingStreamProxy.h" +#include "Parsing/Impl/ParserSingleInputStream.h" +#include "Parsing/Simple/SimpleLexer.h" +#include "Techset/Parsing/TechsetFileParser.h" +#include "Techset/TechsetCommon.h" +#include "Utils/Logging/Log.h" + +#include +#include +#include +#include + +namespace techset +{ + std::unique_ptr + LoadCommonTechset(const std::string& assetName, const CommonTechniqueTypeNames& techniqueTypeNames, ISearchPath& searchPath, bool& failure) + { + failure = false; + + const auto fileName = GetFileNameForTechniqueName(assetName); + const auto techniqueFile = searchPath.Open(fileName); + if (!techniqueFile.IsOpen()) + return nullptr; + + SimpleLexer::Config lexerConfig; + lexerConfig.m_emit_new_line_tokens = false; + lexerConfig.m_read_strings = true; + lexerConfig.m_string_escape_sequences = false; + lexerConfig.m_read_integer_numbers = false; + lexerConfig.m_read_floating_point_numbers = false; + + ParserSingleInputStream baseStream(*techniqueFile.m_stream, fileName); + CommentRemovingStreamProxy commentProxy(&baseStream); + const auto lexer = std::make_unique(&commentProxy, std::move(lexerConfig)); + + const auto parser = std::make_unique(*lexer, techniqueTypeNames); + + const auto success = parser->Parse(); + if (success) + return parser->GetParsingResult(); + + con::error("Parsing techset file \"{}\" failed!", fileName); + failure = true; + return nullptr; + } +} // namespace techset diff --git a/src/ObjCompiling/Techset/CommonTechsetLoader.h b/src/ObjCompiling/Techset/CommonTechsetLoader.h new file mode 100644 index 00000000..dd8adbb7 --- /dev/null +++ b/src/ObjCompiling/Techset/CommonTechsetLoader.h @@ -0,0 +1,12 @@ +#pragma once + +#include "Asset/AssetCreationContext.h" +#include "Techset/CommonTechset.h" + +#include + +namespace techset +{ + std::unique_ptr + LoadCommonTechset(const std::string& assetName, const CommonTechniqueTypeNames& techniqueTypeNames, ISearchPath& searchPath, bool& failure); +} // namespace techset diff --git a/src/ObjLoading/Techset/Parsing/Sequence/TechniqueNoScopeSequences.cpp b/src/ObjCompiling/Techset/Parsing/Sequence/TechniqueNoScopeSequences.cpp similarity index 100% rename from src/ObjLoading/Techset/Parsing/Sequence/TechniqueNoScopeSequences.cpp rename to src/ObjCompiling/Techset/Parsing/Sequence/TechniqueNoScopeSequences.cpp diff --git a/src/ObjLoading/Techset/Parsing/Sequence/TechniqueNoScopeSequences.h b/src/ObjCompiling/Techset/Parsing/Sequence/TechniqueNoScopeSequences.h similarity index 100% rename from src/ObjLoading/Techset/Parsing/Sequence/TechniqueNoScopeSequences.h rename to src/ObjCompiling/Techset/Parsing/Sequence/TechniqueNoScopeSequences.h diff --git a/src/ObjLoading/Techset/Parsing/Sequence/TechniquePassScopeSequences.cpp b/src/ObjCompiling/Techset/Parsing/Sequence/TechniquePassScopeSequences.cpp similarity index 100% rename from src/ObjLoading/Techset/Parsing/Sequence/TechniquePassScopeSequences.cpp rename to src/ObjCompiling/Techset/Parsing/Sequence/TechniquePassScopeSequences.cpp diff --git a/src/ObjLoading/Techset/Parsing/Sequence/TechniquePassScopeSequences.h b/src/ObjCompiling/Techset/Parsing/Sequence/TechniquePassScopeSequences.h similarity index 100% rename from src/ObjLoading/Techset/Parsing/Sequence/TechniquePassScopeSequences.h rename to src/ObjCompiling/Techset/Parsing/Sequence/TechniquePassScopeSequences.h diff --git a/src/ObjLoading/Techset/Parsing/Sequence/TechniqueShaderScopeSequences.cpp b/src/ObjCompiling/Techset/Parsing/Sequence/TechniqueShaderScopeSequences.cpp similarity index 100% rename from src/ObjLoading/Techset/Parsing/Sequence/TechniqueShaderScopeSequences.cpp rename to src/ObjCompiling/Techset/Parsing/Sequence/TechniqueShaderScopeSequences.cpp diff --git a/src/ObjLoading/Techset/Parsing/Sequence/TechniqueShaderScopeSequences.h b/src/ObjCompiling/Techset/Parsing/Sequence/TechniqueShaderScopeSequences.h similarity index 100% rename from src/ObjLoading/Techset/Parsing/Sequence/TechniqueShaderScopeSequences.h rename to src/ObjCompiling/Techset/Parsing/Sequence/TechniqueShaderScopeSequences.h diff --git a/src/ObjLoading/Techset/Parsing/TechniqueFileParser.cpp b/src/ObjCompiling/Techset/Parsing/TechniqueFileParser.cpp similarity index 100% rename from src/ObjLoading/Techset/Parsing/TechniqueFileParser.cpp rename to src/ObjCompiling/Techset/Parsing/TechniqueFileParser.cpp diff --git a/src/ObjLoading/Techset/Parsing/TechniqueFileParser.h b/src/ObjCompiling/Techset/Parsing/TechniqueFileParser.h similarity index 100% rename from src/ObjLoading/Techset/Parsing/TechniqueFileParser.h rename to src/ObjCompiling/Techset/Parsing/TechniqueFileParser.h diff --git a/src/ObjLoading/Techset/Parsing/TechniqueFileParserState.cpp b/src/ObjCompiling/Techset/Parsing/TechniqueFileParserState.cpp similarity index 100% rename from src/ObjLoading/Techset/Parsing/TechniqueFileParserState.cpp rename to src/ObjCompiling/Techset/Parsing/TechniqueFileParserState.cpp diff --git a/src/ObjLoading/Techset/Parsing/TechniqueFileParserState.h b/src/ObjCompiling/Techset/Parsing/TechniqueFileParserState.h similarity index 100% rename from src/ObjLoading/Techset/Parsing/TechniqueFileParserState.h rename to src/ObjCompiling/Techset/Parsing/TechniqueFileParserState.h index 08a87c48..b97b143c 100644 --- a/src/ObjLoading/Techset/Parsing/TechniqueFileParserState.h +++ b/src/ObjCompiling/Techset/Parsing/TechniqueFileParserState.h @@ -7,12 +7,12 @@ namespace techset class TechniqueParserState { public: + explicit TechniqueParserState(ITechniqueDefinitionAcceptor* acceptor); + ITechniqueDefinitionAcceptor* const m_acceptor; bool m_in_pass; bool m_in_shader; ShaderSelector m_current_shader; - - explicit TechniqueParserState(ITechniqueDefinitionAcceptor* acceptor); }; } // namespace techset diff --git a/src/ObjLoading/Techset/Parsing/TechsetFileParser.cpp b/src/ObjCompiling/Techset/Parsing/TechsetFileParser.cpp similarity index 62% rename from src/ObjLoading/Techset/Parsing/TechsetFileParser.cpp rename to src/ObjCompiling/Techset/Parsing/TechsetFileParser.cpp index 6b6f1b86..5bd6bfc3 100644 --- a/src/ObjLoading/Techset/Parsing/TechsetFileParser.cpp +++ b/src/ObjCompiling/Techset/Parsing/TechsetFileParser.cpp @@ -4,7 +4,7 @@ using namespace techset; -namespace techset +namespace { class SequenceTechniqueTypeName final : public TechsetParser::sequence_t { @@ -26,11 +26,11 @@ namespace techset { const auto& typeNameToken = result.NextCapture(CAPTURE_TYPE_NAME); - size_t techniqueTypeIndex; - if (!state->FindTechniqueTypeIndex(typeNameToken.StringValue(), techniqueTypeIndex)) + const auto maybeTechniqueTypeIndex = state->m_technique_type_names.GetTechniqueTypeByName(typeNameToken.StringValue()); + if (!maybeTechniqueTypeIndex.has_value()) throw ParsingException(typeNameToken.GetPos(), "Unknown technique type name"); - state->m_current_technique_types.push_back(techniqueTypeIndex); + state->m_current_technique_types.push_back(maybeTechniqueTypeIndex.value()); } }; @@ -64,31 +64,34 @@ namespace techset techniqueNameToken.m_type == SimpleParserValueType::STRING ? techniqueNameToken.StringValue() : techniqueNameToken.IdentifierValue(); for (const auto techniqueTypeIndex : state->m_current_technique_types) - state->m_definition->SetTechniqueByIndex(techniqueTypeIndex, techniqueName); + state->m_definition->m_technique_names[techniqueTypeIndex] = techniqueName; state->m_current_technique_types.clear(); } }; +} // namespace + +namespace techset +{ + TechsetParser::TechsetParser(SimpleLexer& lexer, const CommonTechniqueTypeNames& techniqueTypeNames) + : AbstractParser(&lexer, std::make_unique(techniqueTypeNames)) + { + } + + const std::vector& TechsetParser::GetTestsForState() + { + static std::vector allTests({ + new SequenceTechniqueTypeName(), + new SequenceTechniqueName(), + }); + static std::vector techniqueTypeNameOnlyTests({ + new SequenceTechniqueTypeName(), + }); + + return m_state->m_current_technique_types.empty() ? techniqueTypeNameOnlyTests : allTests; + } + + std::unique_ptr TechsetParser::GetParsingResult() const + { + return std::move(m_state->m_definition); + } } // namespace techset - -TechsetParser::TechsetParser(SimpleLexer* lexer, const char** validTechniqueTypeNames, const size_t validTechniqueTypeNameCount) - : AbstractParser(lexer, std::make_unique(validTechniqueTypeNames, validTechniqueTypeNameCount)) -{ -} - -const std::vector& TechsetParser::GetTestsForState() -{ - static std::vector allTests({ - new SequenceTechniqueTypeName(), - new SequenceTechniqueName(), - }); - static std::vector techniqueTypeNameOnlyTests({ - new SequenceTechniqueTypeName(), - }); - - return m_state->m_current_technique_types.empty() ? techniqueTypeNameOnlyTests : allTests; -} - -std::unique_ptr TechsetParser::GetTechsetDefinition() const -{ - return std::move(m_state->m_definition); -} diff --git a/src/ObjLoading/Techset/Parsing/TechsetFileParser.h b/src/ObjCompiling/Techset/Parsing/TechsetFileParser.h similarity index 60% rename from src/ObjLoading/Techset/Parsing/TechsetFileParser.h rename to src/ObjCompiling/Techset/Parsing/TechsetFileParser.h index 20620693..d10b718e 100644 --- a/src/ObjLoading/Techset/Parsing/TechsetFileParser.h +++ b/src/ObjCompiling/Techset/Parsing/TechsetFileParser.h @@ -3,19 +3,17 @@ #include "Parsing/Impl/AbstractParser.h" #include "Parsing/Simple/SimpleLexer.h" #include "Parsing/Simple/SimpleParserValue.h" -#include "Techset/TechsetDefinition.h" #include "TechsetFileParserState.h" -#include "Utils/ClassUtils.h" namespace techset { class TechsetParser final : public AbstractParser { + public: + TechsetParser(SimpleLexer& lexer, const CommonTechniqueTypeNames& techniqueTypeNames); + [[nodiscard]] std::unique_ptr GetParsingResult() const; + protected: const std::vector& GetTestsForState() override; - - public: - TechsetParser(SimpleLexer* lexer, const char** validTechniqueTypeNames, size_t validTechniqueTypeNameCount); - _NODISCARD std::unique_ptr GetTechsetDefinition() const; }; } // namespace techset diff --git a/src/ObjCompiling/Techset/Parsing/TechsetFileParserState.cpp b/src/ObjCompiling/Techset/Parsing/TechsetFileParserState.cpp new file mode 100644 index 00000000..5fb2a9fe --- /dev/null +++ b/src/ObjCompiling/Techset/Parsing/TechsetFileParserState.cpp @@ -0,0 +1,10 @@ +#include "TechsetFileParserState.h" + +namespace techset +{ + TechsetParserState::TechsetParserState(const CommonTechniqueTypeNames& techniqueTypeNames) + : m_technique_type_names(techniqueTypeNames), + m_definition(std::make_unique(techniqueTypeNames.GetTechniqueTypeCount())) + { + } +} // namespace techset diff --git a/src/ObjCompiling/Techset/Parsing/TechsetFileParserState.h b/src/ObjCompiling/Techset/Parsing/TechsetFileParserState.h new file mode 100644 index 00000000..fb0154c5 --- /dev/null +++ b/src/ObjCompiling/Techset/Parsing/TechsetFileParserState.h @@ -0,0 +1,20 @@ +#pragma once + +#include "Techset/CommonTechset.h" + +#include +#include +#include + +namespace techset +{ + class TechsetParserState + { + public: + explicit TechsetParserState(const CommonTechniqueTypeNames& techniqueTypeNames); + + const CommonTechniqueTypeNames& m_technique_type_names; + std::unique_ptr m_definition; + std::vector m_current_technique_types; + }; +} // namespace techset diff --git a/src/ObjLoading/Techset/TechsetDefinitionCache.cpp b/src/ObjLoading/Techset/CommonTechsetCache.cpp similarity index 50% rename from src/ObjLoading/Techset/TechsetDefinitionCache.cpp rename to src/ObjLoading/Techset/CommonTechsetCache.cpp index b4041b35..aa089e7b 100644 --- a/src/ObjLoading/Techset/TechsetDefinitionCache.cpp +++ b/src/ObjLoading/Techset/CommonTechsetCache.cpp @@ -1,8 +1,8 @@ -#include "TechsetDefinitionCache.h" +#include "CommonTechsetCache.h" using namespace techset; -TechsetDefinition* TechsetDefinitionCache::GetCachedTechsetDefinition(const std::string& techsetName) const +CommonTechset* CommonTechsetCache::GetCachedTechsetDefinition(const std::string& techsetName) const { const auto foundTechset = m_cache.find(techsetName); @@ -12,7 +12,7 @@ TechsetDefinition* TechsetDefinitionCache::GetCachedTechsetDefinition(const std: return nullptr; } -void TechsetDefinitionCache::AddTechsetDefinitionToCache(std::string name, std::unique_ptr definition) +void CommonTechsetCache::AddCommonTechsetToCache(std::string name, std::unique_ptr definition) { m_cache.emplace(std::make_pair(std::move(name), std::move(definition))); } diff --git a/src/ObjLoading/Techset/CommonTechsetCache.h b/src/ObjLoading/Techset/CommonTechsetCache.h new file mode 100644 index 00000000..dea2a1d2 --- /dev/null +++ b/src/ObjLoading/Techset/CommonTechsetCache.h @@ -0,0 +1,21 @@ +#pragma once + +#include "Asset/IZoneAssetCreationState.h" +#include "Techset/CommonTechset.h" + +#include +#include +#include + +namespace techset +{ + class CommonTechsetCache final : public IZoneAssetCreationState + { + public: + [[nodiscard]] CommonTechset* GetCachedTechsetDefinition(const std::string& techsetName) const; + void AddCommonTechsetToCache(std::string name, std::unique_ptr definition); + + private: + std::unordered_map> m_cache; + }; +} // namespace techset diff --git a/src/ObjLoading/Techset/Parsing/TechsetFileParserState.cpp b/src/ObjLoading/Techset/Parsing/TechsetFileParserState.cpp deleted file mode 100644 index 78c89c75..00000000 --- a/src/ObjLoading/Techset/Parsing/TechsetFileParserState.cpp +++ /dev/null @@ -1,25 +0,0 @@ -#include "TechsetFileParserState.h" - -using namespace techset; - -TechsetParserState::TechsetParserState(const char** validTechniqueTypeNames, size_t validTechniqueTypeNameCount) - : m_definition(std::make_unique(validTechniqueTypeNameCount)) -{ - for (auto i = 0u; i < validTechniqueTypeNameCount; i++) - { - m_valid_technique_type_names.emplace(std::make_pair(std::string(validTechniqueTypeNames[i]), i)); - } -} - -bool TechsetParserState::FindTechniqueTypeIndex(const std::string& techniqueTypeName, size_t& techniqueTypeIndex) const -{ - const auto foundTechniqueType = m_valid_technique_type_names.find(techniqueTypeName); - - if (foundTechniqueType != m_valid_technique_type_names.end()) - { - techniqueTypeIndex = foundTechniqueType->second; - return true; - } - - return false; -} diff --git a/src/ObjLoading/Techset/Parsing/TechsetFileParserState.h b/src/ObjLoading/Techset/Parsing/TechsetFileParserState.h deleted file mode 100644 index 8271198f..00000000 --- a/src/ObjLoading/Techset/Parsing/TechsetFileParserState.h +++ /dev/null @@ -1,22 +0,0 @@ -#pragma once - -#include "Techset/TechsetDefinition.h" - -#include -#include -#include - -namespace techset -{ - class TechsetParserState - { - public: - std::map m_valid_technique_type_names; - std::unique_ptr m_definition; - std::vector m_current_technique_types; - - TechsetParserState(const char** validTechniqueTypeNames, size_t validTechniqueTypeNameCount); - - bool FindTechniqueTypeIndex(const std::string& techniqueTypeName, size_t& techniqueTypeIndex) const; - }; -} // namespace techset diff --git a/src/ObjLoading/Techset/TechsetDefinition.cpp b/src/ObjLoading/Techset/TechsetDefinition.cpp deleted file mode 100644 index dc5cf268..00000000 --- a/src/ObjLoading/Techset/TechsetDefinition.cpp +++ /dev/null @@ -1,31 +0,0 @@ -#include "TechsetDefinition.h" - -#include - -using namespace techset; - -TechsetDefinition::TechsetDefinition(const size_t techniqueTypeCount) - : m_has_technique(techniqueTypeCount), - m_technique_names(techniqueTypeCount) -{ -} - -bool TechsetDefinition::GetTechniqueByIndex(const size_t index, std::string& techniqueName) const -{ - assert(index < m_has_technique.size()); - if (index >= m_has_technique.size() || !m_has_technique[index]) - return false; - - techniqueName = m_technique_names[index]; - return true; -} - -void TechsetDefinition::SetTechniqueByIndex(const size_t index, std::string techniqueName) -{ - assert(index < m_has_technique.size()); - if (index >= m_has_technique.size()) - return; - - m_has_technique[index] = true; - m_technique_names[index] = std::move(techniqueName); -} diff --git a/src/ObjLoading/Techset/TechsetDefinition.h b/src/ObjLoading/Techset/TechsetDefinition.h deleted file mode 100644 index f8f2bf95..00000000 --- a/src/ObjLoading/Techset/TechsetDefinition.h +++ /dev/null @@ -1,18 +0,0 @@ -#pragma once - -#include -#include - -namespace techset -{ - class TechsetDefinition - { - std::vector m_has_technique; - std::vector m_technique_names; - - public: - explicit TechsetDefinition(size_t techniqueTypeCount); - bool GetTechniqueByIndex(size_t index, std::string& techniqueName) const; - void SetTechniqueByIndex(size_t index, std::string techniqueName); - }; -} // namespace techset diff --git a/src/ObjLoading/Techset/TechsetDefinitionCache.h b/src/ObjLoading/Techset/TechsetDefinitionCache.h deleted file mode 100644 index b231f56c..00000000 --- a/src/ObjLoading/Techset/TechsetDefinitionCache.h +++ /dev/null @@ -1,22 +0,0 @@ -#pragma once - -#include "Asset/IZoneAssetCreationState.h" -#include "TechsetDefinition.h" -#include "Utils/ClassUtils.h" - -#include -#include -#include - -namespace techset -{ - class TechsetDefinitionCache final : public IZoneAssetCreationState - { - public: - _NODISCARD TechsetDefinition* GetCachedTechsetDefinition(const std::string& techsetName) const; - void AddTechsetDefinitionToCache(std::string name, std::unique_ptr definition); - - private: - std::unordered_map> m_cache; - }; -} // namespace techset diff --git a/src/ObjLoading/Techset/TechsetFileReader.cpp b/src/ObjLoading/Techset/TechsetFileReader.cpp deleted file mode 100644 index 8b7c61e5..00000000 --- a/src/ObjLoading/Techset/TechsetFileReader.cpp +++ /dev/null @@ -1,40 +0,0 @@ -#include "TechsetFileReader.h" - -#include "Parsing/Impl/CommentRemovingStreamProxy.h" -#include "Parsing/Impl/ParserSingleInputStream.h" -#include "Parsing/TechsetFileParser.h" -#include "Utils/Logging/Log.h" - -#include -#include - -using namespace techset; - -TechsetFileReader::TechsetFileReader(std::istream& stream, std::string fileName, const char** validTechniqueTypeNames, const size_t validTechniqueTypeNameCount) - : m_file_name(std::move(fileName)), - m_valid_technique_type_names(validTechniqueTypeNames), - m_valid_technique_type_name_count(validTechniqueTypeNameCount) -{ - m_base_stream = std::make_unique(stream, m_file_name); - m_comment_proxy = std::make_unique(m_base_stream.get()); -} - -std::unique_ptr TechsetFileReader::ReadTechsetDefinition() const -{ - SimpleLexer::Config lexerConfig; - lexerConfig.m_emit_new_line_tokens = false; - lexerConfig.m_read_strings = true; - lexerConfig.m_string_escape_sequences = false; - lexerConfig.m_read_integer_numbers = false; - lexerConfig.m_read_floating_point_numbers = false; - const auto lexer = std::make_unique(m_comment_proxy.get(), std::move(lexerConfig)); - - const auto parser = std::make_unique(lexer.get(), m_valid_technique_type_names, m_valid_technique_type_name_count); - - const auto success = parser->Parse(); - if (success) - return parser->GetTechsetDefinition(); - - con::error("Parsing techset file \"{}\" failed!", m_file_name); - return nullptr; -} diff --git a/src/ObjLoading/Techset/TechsetFileReader.h b/src/ObjLoading/Techset/TechsetFileReader.h deleted file mode 100644 index 6ba9ac6e..00000000 --- a/src/ObjLoading/Techset/TechsetFileReader.h +++ /dev/null @@ -1,25 +0,0 @@ -#pragma once - -#include "Parsing/IParserLineStream.h" -#include "TechsetDefinition.h" -#include "Utils/ClassUtils.h" - -#include -#include - -namespace techset -{ - class TechsetFileReader - { - std::string m_file_name; - const char** m_valid_technique_type_names; - size_t m_valid_technique_type_name_count; - std::unique_ptr m_base_stream; - std::unique_ptr m_comment_proxy; - - public: - TechsetFileReader(std::istream& stream, std::string fileName, const char** validTechniqueTypeNames, size_t validTechniqueTypeNameCount); - - _NODISCARD std::unique_ptr ReadTechsetDefinition() const; - }; -} // namespace techset diff --git a/src/ObjWriting/Game/IW4/Techset/TechsetDumperIW4.cpp b/src/ObjWriting/Game/IW4/Techset/TechsetDumperIW4.cpp index 9885247e..5c73f90d 100644 --- a/src/ObjWriting/Game/IW4/Techset/TechsetDumperIW4.cpp +++ b/src/ObjWriting/Game/IW4/Techset/TechsetDumperIW4.cpp @@ -471,10 +471,7 @@ namespace techniqueNames[techniqueIndex] = technique->name; } - return techset::CommonTechset{ - .m_name = techset.name, - .m_technique_names = std::move(techniqueNames), - }; + return techset::CommonTechset(techset.name, std::move(techniqueNames)); } void DumpTechset(const AssetDumpingContext& context, const MaterialTechniqueSet& techset) diff --git a/src/ObjWriting/Game/T5/Techset/TechsetDumperT5.cpp b/src/ObjWriting/Game/T5/Techset/TechsetDumperT5.cpp index 09f1f79d..9adc1fc3 100644 --- a/src/ObjWriting/Game/T5/Techset/TechsetDumperT5.cpp +++ b/src/ObjWriting/Game/T5/Techset/TechsetDumperT5.cpp @@ -301,10 +301,7 @@ namespace techniqueNames[techniqueIndex] = technique->name; } - return techset::CommonTechset{ - .m_name = techset.name, - .m_technique_names = std::move(techniqueNames), - }; + return techset::CommonTechset(techset.name, std::move(techniqueNames)); } void DumpTechset(const AssetDumpingContext& context, const MaterialTechniqueSet& techset) diff --git a/src/ObjWriting/Game/T6/Techset/TechsetDumperT6.cpp b/src/ObjWriting/Game/T6/Techset/TechsetDumperT6.cpp index af1d8f22..f9c06660 100644 --- a/src/ObjWriting/Game/T6/Techset/TechsetDumperT6.cpp +++ b/src/ObjWriting/Game/T6/Techset/TechsetDumperT6.cpp @@ -312,18 +312,14 @@ namespace techniqueNames[techniqueIndex] = technique->name; } - return techset::CommonTechset{ - .m_name = techset.name, - .m_technique_names = std::move(techniqueNames), - }; + return techset::CommonTechset(techset.name, std::move(techniqueNames)); } void DumpTechset(const AssetDumpingContext& context, const MaterialTechniqueSet& techset) { - static techset::CommonTechniqueTypeNames commonNames(techniqueTypeNames, std::extent_v); const auto commonTechset = ConvertToCommonTechset(techset); - techset::DumpCommonTechset(commonNames, context, commonTechset); + techset::DumpCommonTechset(commonTechniqueTypeNames, context, commonTechset); } } // namespace