2
0
mirror of https://github.com/Laupetin/OpenAssetTools.git synced 2026-03-15 17:33:03 +00:00

feat: use templated techset compiler for IW4

This commit is contained in:
Jan Laupetin
2026-03-07 10:02:39 +00:00
parent 3bb7f1aa05
commit dbe5cffb2f
4 changed files with 12 additions and 4 deletions

View File

@@ -223,6 +223,8 @@ namespace IW4
using AssetTracer = Asset<ASSET_TYPE_TRACER, TracerDef>; using AssetTracer = Asset<ASSET_TYPE_TRACER, TracerDef>;
using AssetVehicle = Asset<ASSET_TYPE_VEHICLE, VehicleDef>; using AssetVehicle = Asset<ASSET_TYPE_VEHICLE, VehicleDef>;
using AssetAddonMapEnts = Asset<ASSET_TYPE_ADDON_MAP_ENTS, AddonMapEnts>; using AssetAddonMapEnts = Asset<ASSET_TYPE_ADDON_MAP_ENTS, AddonMapEnts>;
using SubAssetTechnique = SubAsset<SUB_ASSET_TYPE_TECHNIQUE, MaterialTechnique>;
} // namespace IW4 } // namespace IW4
DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetPhysPreset, name); DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetPhysPreset, name);

View File

@@ -1,10 +1,10 @@
#include "ObjCompilerIW4.h" #include "ObjCompilerIW4.h"
#include "Game/IW4/IW4.h" #include "Game/IW4/IW4.h"
#include "Game/IW4/Techset/TechsetCompilerIW4.h"
#include "Game/IW4/Techset/VertexDeclCompilerIW4.h" #include "Game/IW4/Techset/VertexDeclCompilerIW4.h"
#include "Image/ImageIwdPostProcessor.h" #include "Image/ImageIwdPostProcessor.h"
#include "Material/CompilerMaterialIW4.h" #include "Material/CompilerMaterialIW4.h"
#include "Techset/CompilerTechsetIW4.h"
#include <memory> #include <memory>
@@ -18,9 +18,9 @@ namespace
#ifdef EXPERIMENTAL_MATERIAL_COMPILATION #ifdef EXPERIMENTAL_MATERIAL_COMPILATION
collection.AddAssetCreator(material::CreateCompilerIW4(memory, searchPath, gdt)); collection.AddAssetCreator(material::CreateCompilerIW4(memory, searchPath, gdt));
collection.AddAssetCreator(techset::CreateLoaderIW4(memory, searchPath));
#endif #endif
collection.AddAssetCreator(techset::CreateVertexDeclCompilerIW4(memory)); collection.AddAssetCreator(techset::CreateVertexDeclCompilerIW4(memory));
collection.AddAssetCreator(techset::CreateTechsetCompilerIW4(memory, searchPath));
} }
void ConfigurePostProcessors(AssetCreatorCollection& collection, void ConfigurePostProcessors(AssetCreatorCollection& collection,

View File

@@ -1,4 +1,4 @@
#options GAME(T6) #options GAME(IW4, T6)
#filename "Game/" + GAME + "/Techset/TechsetCompiler" + GAME + ".cpp" #filename "Game/" + GAME + "/Techset/TechsetCompiler" + GAME + ".cpp"
@@ -69,6 +69,7 @@ namespace
return static_cast<MaterialWorldVertexFormat>(0); return static_cast<MaterialWorldVertexFormat>(0);
} }
#if defined(FEATURE_T6)
MaterialType GetMaterialType(const std::string& name) MaterialType GetMaterialType(const std::string& name)
{ {
for (unsigned materialTypeIndex = MTL_TYPE_MODEL; materialTypeIndex < MTL_TYPE_COUNT; materialTypeIndex++) for (unsigned materialTypeIndex = MTL_TYPE_MODEL; materialTypeIndex < MTL_TYPE_COUNT; materialTypeIndex++)
@@ -87,6 +88,7 @@ namespace
technique.passArray[passIndex].materialType = materialType; technique.passArray[passIndex].materialType = materialType;
} }
} }
#endif
MaterialTechniqueSet* ConvertTechniqueSet(const techset::CommonTechset& commonTechset, MemoryManager& memory) MaterialTechniqueSet* ConvertTechniqueSet(const techset::CommonTechset& commonTechset, MemoryManager& memory)
{ {
@@ -114,7 +116,9 @@ namespace
return failure ? AssetCreationResult::Failure() : AssetCreationResult::NoAction(); return failure ? AssetCreationResult::Failure() : AssetCreationResult::NoAction();
auto* techset = ConvertTechniqueSet(*commonTechset, m_memory); auto* techset = ConvertTechniqueSet(*commonTechset, m_memory);
#if defined(FEATURE_T6)
const auto materialType = GetMaterialType(assetName); const auto materialType = GetMaterialType(assetName);
#endif
for (auto techniqueIndex = 0u; techniqueIndex < std::extent_v<decltype(MaterialTechniqueSet::techniques)>; techniqueIndex++) for (auto techniqueIndex = 0u; techniqueIndex < std::extent_v<decltype(MaterialTechniqueSet::techniques)>; techniqueIndex++)
{ {
@@ -128,10 +132,12 @@ namespace
techset->techniques[techniqueIndex] = technique->Asset(); techset->techniques[techniqueIndex] = technique->Asset();
#if defined(FEATURE_T6)
// Another techset may override this for the technique // Another techset may override this for the technique
// but the game determines the material type by techset name. // but the game determines the material type by techset name.
// So this may just be a constraint that cannot be changed. // So this may just be a constraint that cannot be changed.
ApplyMaterialTypeToTechnique(*techset->techniques[techniqueIndex], materialType); ApplyMaterialTypeToTechnique(*techset->techniques[techniqueIndex], materialType);
#endif
} }
return AssetCreationResult::Success(context.AddAsset(AssetRegistration<AssetTechniqueSet>(assetName, techset))); return AssetCreationResult::Success(context.AddAsset(AssetRegistration<AssetTechniqueSet>(assetName, techset)));

View File

@@ -1,4 +1,4 @@
#options GAME(T6) #options GAME(IW4, T6)
#filename "Game/" + GAME + "/Techset/TechsetCompiler" + GAME + ".h" #filename "Game/" + GAME + "/Techset/TechsetCompiler" + GAME + ".h"