mirror of
https://github.com/Laupetin/OpenAssetTools.git
synced 2025-07-06 19:21:52 +00:00
refactor: move iw4 techset and vertexdecl compiling to ObjCompiling
This commit is contained in:
@ -4,7 +4,7 @@
|
||||
#include "Game/IW4/IW4.h"
|
||||
#include "Game/IW4/MaterialConstantsIW4.h"
|
||||
#include "Game/IW4/ObjConstantsIW4.h"
|
||||
#include "Game/IW4/Techset/LoaderTechsetIW4.h"
|
||||
#include "Game/IW4/Techset/CompilerTechsetIW4.h"
|
||||
#include "Game/IW4/TechsetConstantsIW4.h"
|
||||
#include "Gdt/AbstractGdtEntryReader.h"
|
||||
#include "Gdt/IGdtQueryable.h"
|
||||
|
@ -3,6 +3,8 @@
|
||||
#include "Game/IW4/IW4.h"
|
||||
#include "Image/ImageIwdPostProcessor.h"
|
||||
#include "Material/CompilerMaterialIW4.h"
|
||||
#include "Techset/CompilerTechsetIW4.h"
|
||||
#include "Techset/CompilerVertexDeclIW4.h"
|
||||
|
||||
#include <memory>
|
||||
|
||||
@ -15,8 +17,10 @@ namespace
|
||||
auto& memory = zone.Memory();
|
||||
|
||||
#ifdef EXPERIMENTAL_MATERIAL_COMPILATION
|
||||
collection.AddAssetCreator(CreateCompilingMaterialLoader(memory, searchPath, gdt));
|
||||
collection.AddAssetCreator(CreateMaterialCompiler(memory, searchPath, gdt));
|
||||
collection.AddAssetCreator(CreateTechsetLoader(memory, searchPath));
|
||||
#endif
|
||||
collection.AddAssetCreator(CreateVertexDeclLoader(memory));
|
||||
}
|
||||
|
||||
void ConfigurePostProcessors(AssetCreatorCollection& collection,
|
||||
|
1391
src/ObjCompiling/Game/IW4/Techset/CompilerTechsetIW4.cpp
Normal file
1391
src/ObjCompiling/Game/IW4/Techset/CompilerTechsetIW4.cpp
Normal file
File diff suppressed because it is too large
Load Diff
30
src/ObjCompiling/Game/IW4/Techset/CompilerTechsetIW4.h
Normal file
30
src/ObjCompiling/Game/IW4/Techset/CompilerTechsetIW4.h
Normal file
@ -0,0 +1,30 @@
|
||||
#pragma once
|
||||
|
||||
#include "Asset/IAssetCreator.h"
|
||||
#include "Game/IW4/IW4.h"
|
||||
#include "SearchPath/ISearchPath.h"
|
||||
#include "StateMap/StateMapDefinition.h"
|
||||
#include "Techset/TechsetDefinition.h"
|
||||
#include "Utils/MemoryManager.h"
|
||||
|
||||
#include <memory>
|
||||
#include <string>
|
||||
|
||||
namespace IW4
|
||||
{
|
||||
[[nodiscard]] std::string GetTechsetFileName(const std::string& techsetAssetName);
|
||||
[[nodiscard]] std::string GetTechniqueFileName(const std::string& techniqueName);
|
||||
[[nodiscard]] std::string GetStateMapFileName(const std::string& stateMapName);
|
||||
|
||||
class ITechsetCreator : public AssetCreator<AssetTechniqueSet>
|
||||
{
|
||||
public:
|
||||
ITechsetCreator() = default;
|
||||
virtual ~ITechsetCreator() = default;
|
||||
|
||||
virtual techset::TechsetDefinition* LoadTechsetDefinition(const std::string& assetName, AssetCreationContext& context, bool& failure) = 0;
|
||||
virtual const state_map::StateMapDefinition* LoadStateMapDefinition(const std::string& stateMapName, AssetCreationContext& context) = 0;
|
||||
};
|
||||
|
||||
std::unique_ptr<ITechsetCreator> CreateTechsetLoader(MemoryManager& memory, ISearchPath& searchPath);
|
||||
} // namespace IW4
|
101
src/ObjCompiling/Game/IW4/Techset/CompilerVertexDeclIW4.cpp
Normal file
101
src/ObjCompiling/Game/IW4/Techset/CompilerVertexDeclIW4.cpp
Normal file
@ -0,0 +1,101 @@
|
||||
#include "CompilerVertexDeclIW4.h"
|
||||
|
||||
#include "Game/IW4/IW4.h"
|
||||
#include "Game/IW4/TechsetConstantsIW4.h"
|
||||
|
||||
#include <cstring>
|
||||
#include <format>
|
||||
#include <iostream>
|
||||
|
||||
using namespace IW4;
|
||||
|
||||
namespace
|
||||
{
|
||||
class LoaderVertexDecl final : public AssetCreator<AssetVertexDecl>
|
||||
{
|
||||
public:
|
||||
LoaderVertexDecl(MemoryManager& memory)
|
||||
: m_memory(memory)
|
||||
{
|
||||
}
|
||||
|
||||
AssetCreationResult CreateAsset(const std::string& assetName, AssetCreationContext& context) override
|
||||
{
|
||||
auto* decl = m_memory.Alloc<MaterialVertexDeclaration>();
|
||||
decl->name = m_memory.Dup(assetName.c_str());
|
||||
|
||||
size_t currentOffset = 0u;
|
||||
|
||||
std::string sourceAbbreviation;
|
||||
while (NextAbbreviation(assetName, sourceAbbreviation, currentOffset))
|
||||
{
|
||||
if (decl->streamCount >= std::extent_v<decltype(MaterialVertexStreamRouting::data)>)
|
||||
{
|
||||
std::cerr << std::format("Failed to add vertex decl stream. Too many abbreviations: {}\n", assetName);
|
||||
return AssetCreationResult::Failure();
|
||||
}
|
||||
|
||||
std::string destinationAbbreviation;
|
||||
if (!NextAbbreviation(assetName, destinationAbbreviation, currentOffset))
|
||||
{
|
||||
std::cerr << std::format("Failed to detect vertex decl destination abbreviation: {}\n", assetName);
|
||||
return AssetCreationResult::Failure();
|
||||
}
|
||||
|
||||
const auto foundSourceAbbreviation = std::ranges::find(materialStreamSourceAbbreviation, sourceAbbreviation);
|
||||
if (foundSourceAbbreviation == std::end(materialStreamSourceAbbreviation))
|
||||
{
|
||||
std::cerr << std::format("Unknown vertex decl source abbreviation: {}\n", sourceAbbreviation);
|
||||
return AssetCreationResult::Failure();
|
||||
}
|
||||
|
||||
const auto foundDestinationAbbreviation = std::ranges::find(materialStreamDestinationAbbreviation, destinationAbbreviation);
|
||||
if (foundDestinationAbbreviation == std::end(materialStreamDestinationAbbreviation))
|
||||
{
|
||||
std::cerr << std::format("Unknown vertex decl destination abbreviation: {}\n", destinationAbbreviation);
|
||||
return AssetCreationResult::Failure();
|
||||
}
|
||||
|
||||
const auto sourceIndex = static_cast<MaterialStreamStreamSource_e>(foundSourceAbbreviation - std::begin(materialStreamSourceAbbreviation));
|
||||
const auto destinationIndex =
|
||||
static_cast<MaterialStreamDestination_e>(foundDestinationAbbreviation - std::begin(materialStreamDestinationAbbreviation));
|
||||
|
||||
decl->routing.data[decl->streamCount].source = sourceIndex;
|
||||
decl->routing.data[decl->streamCount].dest = destinationIndex;
|
||||
decl->hasOptionalSource = decl->hasOptionalSource || sourceIndex >= STREAM_SRC_OPTIONAL_BEGIN;
|
||||
decl->streamCount++;
|
||||
}
|
||||
|
||||
return AssetCreationResult::Success(context.AddAsset<AssetVertexDecl>(assetName, decl));
|
||||
}
|
||||
|
||||
static bool NextAbbreviation(const std::string& assetName, std::string& abbreviation, size_t& offset)
|
||||
{
|
||||
if (offset >= assetName.size())
|
||||
return false;
|
||||
|
||||
if (offset + 1 < assetName.size() && isdigit(assetName[offset + 1]))
|
||||
{
|
||||
abbreviation = std::string(assetName, offset, 2);
|
||||
offset += 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
abbreviation = std::string(assetName, offset, 1);
|
||||
offset += 1;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
MemoryManager& m_memory;
|
||||
};
|
||||
} // namespace
|
||||
|
||||
namespace IW4
|
||||
{
|
||||
std::unique_ptr<AssetCreator<AssetVertexDecl>> CreateVertexDeclLoader(MemoryManager& memory)
|
||||
{
|
||||
return std::make_unique<LoaderVertexDecl>(memory);
|
||||
}
|
||||
} // namespace IW4
|
13
src/ObjCompiling/Game/IW4/Techset/CompilerVertexDeclIW4.h
Normal file
13
src/ObjCompiling/Game/IW4/Techset/CompilerVertexDeclIW4.h
Normal file
@ -0,0 +1,13 @@
|
||||
#pragma once
|
||||
|
||||
#include "Asset/IAssetCreator.h"
|
||||
#include "Game/IW4/IW4.h"
|
||||
#include "SearchPath/ISearchPath.h"
|
||||
#include "Utils/MemoryManager.h"
|
||||
|
||||
#include <memory>
|
||||
|
||||
namespace IW4
|
||||
{
|
||||
std::unique_ptr<AssetCreator<AssetVertexDecl>> CreateVertexDeclLoader(MemoryManager& memory);
|
||||
} // namespace IW4
|
Reference in New Issue
Block a user