diff --git a/src/ObjCommon/Image/ImageCommon.cpp b/src/ObjCommon/Image/ImageCommon.cpp new file mode 100644 index 00000000..8a605bd7 --- /dev/null +++ b/src/ObjCommon/Image/ImageCommon.cpp @@ -0,0 +1,15 @@ +#include "ImageCommon.h" + +#include +#include + +namespace image +{ + std::string GetFileNameForAsset(std::string assetName, const std::string& extension) + { + std::string cleanAssetName(std::move(assetName)); + std::ranges::replace(cleanAssetName, '*', '_'); + + return std::format("images/{}{}", cleanAssetName, extension); + } +} // namespace image diff --git a/src/ObjCommon/Image/ImageCommon.h b/src/ObjCommon/Image/ImageCommon.h new file mode 100644 index 00000000..1a18b70e --- /dev/null +++ b/src/ObjCommon/Image/ImageCommon.h @@ -0,0 +1,8 @@ +#pragma once + +#include + +namespace image +{ + std::string GetFileNameForAsset(std::string assetName, const std::string& extension); +} diff --git a/src/ObjWriting/Game/IW3/Image/AssetDumperGfxImage.cpp b/src/ObjWriting/Game/IW3/Image/ImageDumperIW3.cpp similarity index 59% rename from src/ObjWriting/Game/IW3/Image/AssetDumperGfxImage.cpp rename to src/ObjWriting/Game/IW3/Image/ImageDumperIW3.cpp index 5f76f1c4..0e8c9873 100644 --- a/src/ObjWriting/Game/IW3/Image/AssetDumperGfxImage.cpp +++ b/src/ObjWriting/Game/IW3/Image/ImageDumperIW3.cpp @@ -1,7 +1,8 @@ -#include "AssetDumperGfxImage.h" +#include "ImageDumperIW3.h" #include "Image/DdsWriter.h" #include "Image/Dx9TextureLoader.h" +#include "Image/ImageCommon.h" #include "Image/IwiLoader.h" #include "Image/IwiTypes.h" #include "Image/IwiWriter6.h" @@ -13,7 +14,9 @@ #include #include + using namespace IW3; +using namespace ::image; namespace { @@ -58,48 +61,43 @@ namespace } } // namespace -AssetDumperGfxImage::AssetDumperGfxImage() +namespace IW3::image { - switch (ObjWriting::Configuration.ImageOutputFormat) + Dumper::Dumper() { - case ObjWriting::Configuration_t::ImageOutputFormat_e::DDS: - m_writer = std::make_unique(); - break; - case ObjWriting::Configuration_t::ImageOutputFormat_e::IWI: - m_writer = std::make_unique(); - break; - default: - assert(false); - m_writer = nullptr; - break; + switch (ObjWriting::Configuration.ImageOutputFormat) + { + case ObjWriting::Configuration_t::ImageOutputFormat_e::DDS: + m_writer = std::make_unique(); + break; + case ObjWriting::Configuration_t::ImageOutputFormat_e::IWI: + m_writer = std::make_unique(); + break; + default: + assert(false); + m_writer = nullptr; + break; + } } -} -bool AssetDumperGfxImage::ShouldDump(XAssetInfo* asset) -{ - return true; -} + bool Dumper::ShouldDump(XAssetInfo* asset) + { + return true; + } -std::string AssetDumperGfxImage::GetAssetFileName(const XAssetInfo& asset) const -{ - auto cleanAssetName = asset.m_name; - std::ranges::replace(cleanAssetName, '*', '_'); + void Dumper::DumpAsset(AssetDumpingContext& context, XAssetInfo* asset) + { + const auto* image = asset->Asset(); + const auto texture = LoadImageData(context.m_obj_search_path, *image); + if (!texture) + return; - return std::format("images/{}{}", cleanAssetName, m_writer->GetFileExtension()); -} + const auto assetFile = context.OpenAssetFile(GetFileNameForAsset(asset->m_name, m_writer->GetFileExtension())); -void AssetDumperGfxImage::DumpAsset(AssetDumpingContext& context, XAssetInfo* asset) -{ - const auto* image = asset->Asset(); - const auto texture = LoadImageData(context.m_obj_search_path, *image); - if (!texture) - return; + if (!assetFile) + return; - const auto assetFile = context.OpenAssetFile(GetAssetFileName(*asset)); - - if (!assetFile) - return; - - auto& stream = *assetFile; - m_writer->DumpImage(stream, texture.get()); -} + auto& stream = *assetFile; + m_writer->DumpImage(stream, texture.get()); + } +} // namespace IW3::image diff --git a/src/ObjWriting/Game/IW3/Image/AssetDumperGfxImage.h b/src/ObjWriting/Game/IW3/Image/ImageDumperIW3.h similarity index 61% rename from src/ObjWriting/Game/IW3/Image/AssetDumperGfxImage.h rename to src/ObjWriting/Game/IW3/Image/ImageDumperIW3.h index 009a7e57..24a22efa 100644 --- a/src/ObjWriting/Game/IW3/Image/AssetDumperGfxImage.h +++ b/src/ObjWriting/Game/IW3/Image/ImageDumperIW3.h @@ -6,19 +6,18 @@ #include -namespace IW3 +namespace IW3::image { - class AssetDumperGfxImage final : public AbstractAssetDumper + class Dumper final : public AbstractAssetDumper { - std::unique_ptr m_writer; - - [[nodiscard]] std::string GetAssetFileName(const XAssetInfo& asset) const; + public: + Dumper(); protected: bool ShouldDump(XAssetInfo* asset) override; void DumpAsset(AssetDumpingContext& context, XAssetInfo* asset) override; - public: - AssetDumperGfxImage(); + private: + std::unique_ptr m_writer; }; -} // namespace IW3 +} // namespace IW3::image diff --git a/src/ObjWriting/Game/IW3/ObjWriterIW3.cpp b/src/ObjWriting/Game/IW3/ObjWriterIW3.cpp index b2a605df..cec9c088 100644 --- a/src/ObjWriting/Game/IW3/ObjWriterIW3.cpp +++ b/src/ObjWriting/Game/IW3/ObjWriterIW3.cpp @@ -2,7 +2,7 @@ #include "Game/IW3/GameAssetPoolIW3.h" #include "Game/IW3/XModel/XModelDumperIW3.h" -#include "Image/AssetDumperGfxImage.h" +#include "Image/ImageDumperIW3.h" #include "Localize/AssetDumperLocalizeEntry.h" #include "Maps/AssetDumperMapEnts.h" #include "Material/DumperMaterialIW3.h" @@ -30,7 +30,7 @@ bool ObjWriter::DumpZone(AssetDumpingContext& context) const DUMP_ASSET_POOL(AssetDumperXModel, m_xmodel, ASSET_TYPE_XMODEL) DUMP_ASSET_POOL(AssetDumperMaterial, m_material, ASSET_TYPE_MATERIAL) // DUMP_ASSET_POOL(AssetDumperMaterialTechniqueSet, m_technique_set, ASSET_TYPE_TECHNIQUE_SET) - DUMP_ASSET_POOL(AssetDumperGfxImage, m_image, ASSET_TYPE_IMAGE) + DUMP_ASSET_POOL(image::Dumper, m_image, ASSET_TYPE_IMAGE) // DUMP_ASSET_POOL(AssetDumpersnd_alias_list_t, m_sound, ASSET_TYPE_SOUND) // DUMP_ASSET_POOL(AssetDumperSndCurve, m_sound_curve, ASSET_TYPE_SOUND_CURVE) DUMP_ASSET_POOL(AssetDumperLoadedSound, m_loaded_sound, ASSET_TYPE_LOADED_SOUND) diff --git a/src/ObjWriting/Game/IW4/Image/AssetDumperGfxImage.cpp b/src/ObjWriting/Game/IW4/Image/ImageDumperIW4.cpp similarity index 59% rename from src/ObjWriting/Game/IW4/Image/AssetDumperGfxImage.cpp rename to src/ObjWriting/Game/IW4/Image/ImageDumperIW4.cpp index 4490e520..ad2bf5c9 100644 --- a/src/ObjWriting/Game/IW4/Image/AssetDumperGfxImage.cpp +++ b/src/ObjWriting/Game/IW4/Image/ImageDumperIW4.cpp @@ -1,7 +1,8 @@ -#include "AssetDumperGfxImage.h" +#include "ImageDumperIW4.h" #include "Image/DdsWriter.h" #include "Image/Dx9TextureLoader.h" +#include "Image/ImageCommon.h" #include "Image/IwiLoader.h" #include "Image/IwiWriter8.h" #include "ObjWriting.h" @@ -11,6 +12,7 @@ #include using namespace IW4; +using namespace ::image; namespace { @@ -55,48 +57,43 @@ namespace } } // namespace -AssetDumperGfxImage::AssetDumperGfxImage() +namespace IW4::image { - switch (ObjWriting::Configuration.ImageOutputFormat) + Dumper::Dumper() { - case ObjWriting::Configuration_t::ImageOutputFormat_e::DDS: - m_writer = std::make_unique(); - break; - case ObjWriting::Configuration_t::ImageOutputFormat_e::IWI: - m_writer = std::make_unique(); - break; - default: - assert(false); - m_writer = nullptr; - break; + switch (ObjWriting::Configuration.ImageOutputFormat) + { + case ObjWriting::Configuration_t::ImageOutputFormat_e::DDS: + m_writer = std::make_unique(); + break; + case ObjWriting::Configuration_t::ImageOutputFormat_e::IWI: + m_writer = std::make_unique(); + break; + default: + assert(false); + m_writer = nullptr; + break; + } } -} -bool AssetDumperGfxImage::ShouldDump(XAssetInfo* asset) -{ - return true; -} + bool Dumper::ShouldDump(XAssetInfo* asset) + { + return true; + } -std::string AssetDumperGfxImage::GetAssetFileName(const XAssetInfo& asset) const -{ - auto cleanAssetName = asset.m_name; - std::ranges::replace(cleanAssetName, '*', '_'); + void Dumper::DumpAsset(AssetDumpingContext& context, XAssetInfo* asset) + { + const auto* image = asset->Asset(); + const auto texture = LoadImageData(context.m_obj_search_path, *image); + if (!texture) + return; - return std::format("images/{}{}", cleanAssetName, m_writer->GetFileExtension()); -} + const auto assetFile = context.OpenAssetFile(GetFileNameForAsset(asset->m_name, m_writer->GetFileExtension())); -void AssetDumperGfxImage::DumpAsset(AssetDumpingContext& context, XAssetInfo* asset) -{ - const auto* image = asset->Asset(); - const auto texture = LoadImageData(context.m_obj_search_path, *image); - if (!texture) - return; + if (!assetFile) + return; - const auto assetFile = context.OpenAssetFile(GetAssetFileName(*asset)); - - if (!assetFile) - return; - - auto& stream = *assetFile; - m_writer->DumpImage(stream, texture.get()); -} + auto& stream = *assetFile; + m_writer->DumpImage(stream, texture.get()); + } +} // namespace IW4::image diff --git a/src/ObjWriting/Game/IW4/Image/AssetDumperGfxImage.h b/src/ObjWriting/Game/IW4/Image/ImageDumperIW4.h similarity index 61% rename from src/ObjWriting/Game/IW4/Image/AssetDumperGfxImage.h rename to src/ObjWriting/Game/IW4/Image/ImageDumperIW4.h index bcbee6ec..ee9910f4 100644 --- a/src/ObjWriting/Game/IW4/Image/AssetDumperGfxImage.h +++ b/src/ObjWriting/Game/IW4/Image/ImageDumperIW4.h @@ -6,19 +6,18 @@ #include -namespace IW4 +namespace IW4::image { - class AssetDumperGfxImage final : public AbstractAssetDumper + class Dumper final : public AbstractAssetDumper { - std::unique_ptr m_writer; - - [[nodiscard]] std::string GetAssetFileName(const XAssetInfo& asset) const; + public: + Dumper(); protected: bool ShouldDump(XAssetInfo* asset) override; void DumpAsset(AssetDumpingContext& context, XAssetInfo* asset) override; - public: - AssetDumperGfxImage(); + private: + std::unique_ptr m_writer; }; -} // namespace IW4 +} // namespace IW4::image diff --git a/src/ObjWriting/Game/IW4/ObjWriterIW4.cpp b/src/ObjWriting/Game/IW4/ObjWriterIW4.cpp index 40a370b6..4a32c507 100644 --- a/src/ObjWriting/Game/IW4/ObjWriterIW4.cpp +++ b/src/ObjWriting/Game/IW4/ObjWriterIW4.cpp @@ -2,7 +2,7 @@ #include "Game/IW4/GameAssetPoolIW4.h" #include "Game/IW4/XModel/XModelDumperIW4.h" -#include "Image/AssetDumperGfxImage.h" +#include "Image/ImageDumperIW4.h" #include "Leaderboard/LeaderboardJsonDumperIW4.h" #include "LightDef/LightDefDumperIW4.h" #include "Localize/AssetDumperLocalizeEntry.h" @@ -46,7 +46,7 @@ bool ObjWriter::DumpZone(AssetDumpingContext& context) const DUMP_ASSET_POOL(AssetDumperPixelShader, m_material_pixel_shader, ASSET_TYPE_PIXELSHADER) DUMP_ASSET_POOL(AssetDumperVertexShader, m_material_vertex_shader, ASSET_TYPE_VERTEXSHADER) DUMP_ASSET_POOL(AssetDumperTechniqueSet, m_technique_set, ASSET_TYPE_TECHNIQUE_SET) - DUMP_ASSET_POOL(AssetDumperGfxImage, m_image, ASSET_TYPE_IMAGE) + DUMP_ASSET_POOL(image::Dumper, m_image, ASSET_TYPE_IMAGE) // DUMP_ASSET_POOL(AssetDumpersnd_alias_list_t, m_sound, ASSET_TYPE_SOUND) DUMP_ASSET_POOL(AssetDumperSndCurve, m_sound_curve, ASSET_TYPE_SOUND_CURVE) DUMP_ASSET_POOL(AssetDumperLoadedSound, m_loaded_sound, ASSET_TYPE_LOADED_SOUND) diff --git a/src/ObjWriting/Game/IW5/Image/AssetDumperGfxImage.cpp b/src/ObjWriting/Game/IW5/Image/ImageDumperIW5.cpp similarity index 59% rename from src/ObjWriting/Game/IW5/Image/AssetDumperGfxImage.cpp rename to src/ObjWriting/Game/IW5/Image/ImageDumperIW5.cpp index 82d3cca1..5bc59c92 100644 --- a/src/ObjWriting/Game/IW5/Image/AssetDumperGfxImage.cpp +++ b/src/ObjWriting/Game/IW5/Image/ImageDumperIW5.cpp @@ -1,7 +1,8 @@ -#include "AssetDumperGfxImage.h" +#include "ImageDumperIW5.h" #include "Image/DdsWriter.h" #include "Image/Dx9TextureLoader.h" +#include "Image/ImageCommon.h" #include "Image/IwiLoader.h" #include "Image/IwiWriter8.h" #include "ObjWriting.h" @@ -10,7 +11,9 @@ #include #include + using namespace IW5; +using namespace ::image; namespace { @@ -56,48 +59,43 @@ namespace } } // namespace -AssetDumperGfxImage::AssetDumperGfxImage() +namespace IW5::image { - switch (ObjWriting::Configuration.ImageOutputFormat) + Dumper::Dumper() { - case ObjWriting::Configuration_t::ImageOutputFormat_e::DDS: - m_writer = std::make_unique(); - break; - case ObjWriting::Configuration_t::ImageOutputFormat_e::IWI: - m_writer = std::make_unique(); - break; - default: - assert(false); - m_writer = nullptr; - break; + switch (ObjWriting::Configuration.ImageOutputFormat) + { + case ObjWriting::Configuration_t::ImageOutputFormat_e::DDS: + m_writer = std::make_unique(); + break; + case ObjWriting::Configuration_t::ImageOutputFormat_e::IWI: + m_writer = std::make_unique(); + break; + default: + assert(false); + m_writer = nullptr; + break; + } } -} -bool AssetDumperGfxImage::ShouldDump(XAssetInfo* asset) -{ - return true; -} + bool Dumper::ShouldDump(XAssetInfo* asset) + { + return true; + } -std::string AssetDumperGfxImage::GetAssetFileName(const XAssetInfo& asset) const -{ - auto cleanAssetName = asset.m_name; - std::ranges::replace(cleanAssetName, '*', '_'); + void Dumper::DumpAsset(AssetDumpingContext& context, XAssetInfo* asset) + { + const auto* image = asset->Asset(); + const auto texture = LoadImageData(context.m_obj_search_path, *image); + if (!texture) + return; - return std::format("images/{}{}", cleanAssetName, m_writer->GetFileExtension()); -} + const auto assetFile = context.OpenAssetFile(GetFileNameForAsset(asset->m_name, m_writer->GetFileExtension())); -void AssetDumperGfxImage::DumpAsset(AssetDumpingContext& context, XAssetInfo* asset) -{ - const auto* image = asset->Asset(); - const auto texture = LoadImageData(context.m_obj_search_path, *image); - if (!texture) - return; + if (!assetFile) + return; - const auto assetFile = context.OpenAssetFile(GetAssetFileName(*asset)); - - if (!assetFile) - return; - - auto& stream = *assetFile; - m_writer->DumpImage(stream, texture.get()); -} + auto& stream = *assetFile; + m_writer->DumpImage(stream, texture.get()); + } +} // namespace IW5::image diff --git a/src/ObjWriting/Game/IW5/Image/AssetDumperGfxImage.h b/src/ObjWriting/Game/IW5/Image/ImageDumperIW5.h similarity index 61% rename from src/ObjWriting/Game/IW5/Image/AssetDumperGfxImage.h rename to src/ObjWriting/Game/IW5/Image/ImageDumperIW5.h index fac3f66b..ff6edf39 100644 --- a/src/ObjWriting/Game/IW5/Image/AssetDumperGfxImage.h +++ b/src/ObjWriting/Game/IW5/Image/ImageDumperIW5.h @@ -6,19 +6,18 @@ #include -namespace IW5 +namespace IW5::image { - class AssetDumperGfxImage final : public AbstractAssetDumper + class Dumper final : public AbstractAssetDumper { - std::unique_ptr m_writer; - - [[nodiscard]] std::string GetAssetFileName(const XAssetInfo& asset) const; + public: + Dumper(); protected: bool ShouldDump(XAssetInfo* asset) override; void DumpAsset(AssetDumpingContext& context, XAssetInfo* asset) override; - public: - AssetDumperGfxImage(); + private: + std::unique_ptr m_writer; }; -} // namespace IW5 +} // namespace IW5::image diff --git a/src/ObjWriting/Game/IW5/ObjWriterIW5.cpp b/src/ObjWriting/Game/IW5/ObjWriterIW5.cpp index 2a9599c9..7a10547f 100644 --- a/src/ObjWriting/Game/IW5/ObjWriterIW5.cpp +++ b/src/ObjWriting/Game/IW5/ObjWriterIW5.cpp @@ -2,7 +2,7 @@ #include "Game/IW5/GameAssetPoolIW5.h" #include "Game/IW5/XModel/XModelDumperIW5.h" -#include "Image/AssetDumperGfxImage.h" +#include "Image/ImageDumperIW5.h" #include "Leaderboard/LeaderboardJsonDumperIW5.h" #include "Localize/AssetDumperLocalizeEntry.h" #include "Maps/AssetDumperAddonMapEnts.h" @@ -39,7 +39,7 @@ bool ObjWriter::DumpZone(AssetDumpingContext& context) const // DUMP_ASSET_POOL(AssetDumperMaterialVertexShader, m_material_vertex_shader, ASSET_TYPE_VERTEXSHADER) // DUMP_ASSET_POOL(AssetDumperMaterialVertexDeclaration, m_material_vertex_decl, ASSET_TYPE_VERTEXDECL) // DUMP_ASSET_POOL(AssetDumperMaterialTechniqueSet, m_technique_set, ASSET_TYPE_TECHNIQUE_SET) - DUMP_ASSET_POOL(AssetDumperGfxImage, m_image, ASSET_TYPE_IMAGE) + DUMP_ASSET_POOL(image::Dumper, m_image, ASSET_TYPE_IMAGE) // DUMP_ASSET_POOL(AssetDumpersnd_alias_list_t, m_sound, ASSET_TYPE_SOUND) // DUMP_ASSET_POOL(AssetDumperSndCurve, m_sound_curve, ASSET_TYPE_SOUND_CURVE) DUMP_ASSET_POOL(AssetDumperLoadedSound, m_loaded_sound, ASSET_TYPE_LOADED_SOUND) diff --git a/src/ObjWriting/Game/T5/Image/AssetDumperGfxImage.cpp b/src/ObjWriting/Game/T5/Image/ImageDumperT5.cpp similarity index 58% rename from src/ObjWriting/Game/T5/Image/AssetDumperGfxImage.cpp rename to src/ObjWriting/Game/T5/Image/ImageDumperT5.cpp index 6bb99fcf..a0ba1d0a 100644 --- a/src/ObjWriting/Game/T5/Image/AssetDumperGfxImage.cpp +++ b/src/ObjWriting/Game/T5/Image/ImageDumperT5.cpp @@ -1,7 +1,8 @@ -#include "AssetDumperGfxImage.h" +#include "ImageDumperT5.h" #include "Image/DdsWriter.h" #include "Image/Dx9TextureLoader.h" +#include "Image/ImageCommon.h" #include "Image/IwiLoader.h" #include "Image/IwiWriter13.h" #include "ObjWriting.h" @@ -11,6 +12,7 @@ #include using namespace T5; +using namespace ::image; namespace { @@ -55,48 +57,43 @@ namespace } } // namespace -AssetDumperGfxImage::AssetDumperGfxImage() +namespace T5::image { - switch (ObjWriting::Configuration.ImageOutputFormat) + Dumper::Dumper() { - case ObjWriting::Configuration_t::ImageOutputFormat_e::DDS: - m_writer = std::make_unique(); - break; - case ObjWriting::Configuration_t::ImageOutputFormat_e::IWI: - m_writer = std::make_unique(); - break; - default: - assert(false); - m_writer = nullptr; - break; + switch (ObjWriting::Configuration.ImageOutputFormat) + { + case ObjWriting::Configuration_t::ImageOutputFormat_e::DDS: + m_writer = std::make_unique(); + break; + case ObjWriting::Configuration_t::ImageOutputFormat_e::IWI: + m_writer = std::make_unique(); + break; + default: + assert(false); + m_writer = nullptr; + break; + } } -} -bool AssetDumperGfxImage::ShouldDump(XAssetInfo* asset) -{ - return true; -} + bool Dumper::ShouldDump(XAssetInfo* asset) + { + return true; + } -std::string AssetDumperGfxImage::GetAssetFileName(const XAssetInfo& asset) const -{ - auto cleanAssetName = asset.m_name; - std::ranges::replace(cleanAssetName, '*', '_'); + void Dumper::DumpAsset(AssetDumpingContext& context, XAssetInfo* asset) + { + const auto* image = asset->Asset(); + const auto texture = LoadImageData(context.m_obj_search_path, *image); + if (!texture) + return; - return std::format("images/{}{}", cleanAssetName, m_writer->GetFileExtension()); -} + const auto assetFile = context.OpenAssetFile(GetFileNameForAsset(asset->m_name, m_writer->GetFileExtension())); -void AssetDumperGfxImage::DumpAsset(AssetDumpingContext& context, XAssetInfo* asset) -{ - const auto* image = asset->Asset(); - const auto texture = LoadImageData(context.m_obj_search_path, *image); - if (!texture) - return; + if (!assetFile) + return; - const auto assetFile = context.OpenAssetFile(GetAssetFileName(*asset)); - - if (!assetFile) - return; - - auto& stream = *assetFile; - m_writer->DumpImage(stream, texture.get()); -} + auto& stream = *assetFile; + m_writer->DumpImage(stream, texture.get()); + } +} // namespace T5::image diff --git a/src/ObjWriting/Game/T5/Image/AssetDumperGfxImage.h b/src/ObjWriting/Game/T5/Image/ImageDumperT5.h similarity index 62% rename from src/ObjWriting/Game/T5/Image/AssetDumperGfxImage.h rename to src/ObjWriting/Game/T5/Image/ImageDumperT5.h index b9f89b36..82581dde 100644 --- a/src/ObjWriting/Game/T5/Image/AssetDumperGfxImage.h +++ b/src/ObjWriting/Game/T5/Image/ImageDumperT5.h @@ -6,19 +6,18 @@ #include -namespace T5 +namespace T5::image { - class AssetDumperGfxImage final : public AbstractAssetDumper + class Dumper final : public AbstractAssetDumper { - std::unique_ptr m_writer; - - [[nodiscard]] std::string GetAssetFileName(const XAssetInfo& asset) const; + public: + Dumper(); protected: bool ShouldDump(XAssetInfo* asset) override; void DumpAsset(AssetDumpingContext& context, XAssetInfo* asset) override; - public: - AssetDumperGfxImage(); + private: + std::unique_ptr m_writer; }; -} // namespace T5 +} // namespace T5::image diff --git a/src/ObjWriting/Game/T5/ObjWriterT5.cpp b/src/ObjWriting/Game/T5/ObjWriterT5.cpp index e37bc427..7dd14410 100644 --- a/src/ObjWriting/Game/T5/ObjWriterT5.cpp +++ b/src/ObjWriting/Game/T5/ObjWriterT5.cpp @@ -2,7 +2,7 @@ #include "Game/T5/GameAssetPoolT5.h" #include "Game/T5/XModel/XModelDumperT5.h" -#include "Image/AssetDumperGfxImage.h" +#include "Image/ImageDumperT5.h" #include "Localize/AssetDumperLocalizeEntry.h" #include "Material/DumperMaterialT5.h" #include "ObjWriting.h" @@ -33,7 +33,7 @@ bool ObjWriter::DumpZone(AssetDumpingContext& context) const DUMP_ASSET_POOL(AssetDumperXModel, m_xmodel, ASSET_TYPE_XMODEL) DUMP_ASSET_POOL(AssetDumperMaterial, m_material, ASSET_TYPE_MATERIAL) // DUMP_ASSET_POOL(AssetDumperTechniqueSet, m_technique_set, ASSET_TYPE_TECHNIQUE_SET) - DUMP_ASSET_POOL(AssetDumperGfxImage, m_image, ASSET_TYPE_IMAGE) + DUMP_ASSET_POOL(image::Dumper, m_image, ASSET_TYPE_IMAGE) // DUMP_ASSET_POOL(AssetDumperSndBank, m_sound_bank, ASSET_TYPE_SOUND) // DUMP_ASSET_POOL(AssetDumperSndPatch, m_sound_patch, ASSET_TYPE_SOUND_PATCH) // DUMP_ASSET_POOL(AssetDumperClipMap, m_clip_map, ASSET_TYPE_CLIPMAP_PVS) diff --git a/src/ObjWriting/Game/T6/Image/AssetDumperGfxImage.cpp b/src/ObjWriting/Game/T6/Image/ImageDumperT6.cpp similarity index 64% rename from src/ObjWriting/Game/T6/Image/AssetDumperGfxImage.cpp rename to src/ObjWriting/Game/T6/Image/ImageDumperT6.cpp index f529cca1..d492a848 100644 --- a/src/ObjWriting/Game/T6/Image/AssetDumperGfxImage.cpp +++ b/src/ObjWriting/Game/T6/Image/ImageDumperT6.cpp @@ -1,7 +1,8 @@ -#include "AssetDumperGfxImage.h" +#include "ImageDumperT6.h" #include "Image/DdsWriter.h" #include "Image/Dx12TextureLoader.h" +#include "Image/ImageCommon.h" #include "Image/IwiLoader.h" #include "Image/IwiWriter27.h" #include "ObjContainer/IPak/IPak.h" @@ -12,6 +13,7 @@ #include using namespace T6; +using namespace ::image; namespace { @@ -73,48 +75,43 @@ namespace } } // namespace -AssetDumperGfxImage::AssetDumperGfxImage() +namespace T6::image { - switch (ObjWriting::Configuration.ImageOutputFormat) + Dumper::Dumper() { - case ObjWriting::Configuration_t::ImageOutputFormat_e::DDS: - m_writer = std::make_unique(); - break; - case ObjWriting::Configuration_t::ImageOutputFormat_e::IWI: - m_writer = std::make_unique(); - break; - default: - assert(false); - m_writer = nullptr; - break; + switch (ObjWriting::Configuration.ImageOutputFormat) + { + case ObjWriting::Configuration_t::ImageOutputFormat_e::DDS: + m_writer = std::make_unique(); + break; + case ObjWriting::Configuration_t::ImageOutputFormat_e::IWI: + m_writer = std::make_unique(); + break; + default: + assert(false); + m_writer = nullptr; + break; + } } -} -bool AssetDumperGfxImage::ShouldDump(XAssetInfo* asset) -{ - return true; -} + bool Dumper::ShouldDump(XAssetInfo* asset) + { + return true; + } -std::string AssetDumperGfxImage::GetAssetFileName(const XAssetInfo& asset) const -{ - auto cleanAssetName = asset.m_name; - std::ranges::replace(cleanAssetName, '*', '_'); + void Dumper::DumpAsset(AssetDumpingContext& context, XAssetInfo* asset) + { + const auto* image = asset->Asset(); + const auto texture = LoadImageData(context.m_obj_search_path, *image); + if (!texture) + return; - return std::format("images/{}{}", cleanAssetName, m_writer->GetFileExtension()); -} + const auto assetFile = context.OpenAssetFile(GetFileNameForAsset(asset->m_name, m_writer->GetFileExtension())); -void AssetDumperGfxImage::DumpAsset(AssetDumpingContext& context, XAssetInfo* asset) -{ - const auto* image = asset->Asset(); - const auto texture = LoadImageData(context.m_obj_search_path, *image); - if (!texture) - return; + if (!assetFile) + return; - const auto assetFile = context.OpenAssetFile(GetAssetFileName(*asset)); - - if (!assetFile) - return; - - auto& stream = *assetFile; - m_writer->DumpImage(stream, texture.get()); -} + auto& stream = *assetFile; + m_writer->DumpImage(stream, texture.get()); + } +} // namespace T6::image diff --git a/src/ObjWriting/Game/T6/Image/AssetDumperGfxImage.h b/src/ObjWriting/Game/T6/Image/ImageDumperT6.h similarity index 63% rename from src/ObjWriting/Game/T6/Image/AssetDumperGfxImage.h rename to src/ObjWriting/Game/T6/Image/ImageDumperT6.h index 401aae5e..4b0c2599 100644 --- a/src/ObjWriting/Game/T6/Image/AssetDumperGfxImage.h +++ b/src/ObjWriting/Game/T6/Image/ImageDumperT6.h @@ -6,19 +6,18 @@ #include -namespace T6 +namespace T6::image { - class AssetDumperGfxImage final : public AbstractAssetDumper + class Dumper final : public AbstractAssetDumper { - std::unique_ptr m_writer; - - std::string GetAssetFileName(const XAssetInfo& asset) const; + public: + Dumper(); protected: bool ShouldDump(XAssetInfo* asset) override; void DumpAsset(AssetDumpingContext& context, XAssetInfo* asset) override; - public: - AssetDumperGfxImage(); + private: + std::unique_ptr m_writer; }; -} // namespace T6 +} // namespace T6::image diff --git a/src/ObjWriting/Game/T6/ObjWriterT6.cpp b/src/ObjWriting/Game/T6/ObjWriterT6.cpp index 37313290..4a33c00d 100644 --- a/src/ObjWriting/Game/T6/ObjWriterT6.cpp +++ b/src/ObjWriting/Game/T6/ObjWriterT6.cpp @@ -3,7 +3,7 @@ #include "FontIcon/FontIconDumperT6.h" #include "Game/T6/GameAssetPoolT6.h" #include "Game/T6/XModel/XModelDumperT6.h" -#include "Image/AssetDumperGfxImage.h" +#include "Image/ImageDumperT6.h" #include "Leaderboard/LeaderboardJsonDumperT6.h" #include "Localize/AssetDumperLocalizeEntry.h" #include "Maps/AssetDumperMapEnts.h" @@ -53,7 +53,7 @@ bool ObjWriter::DumpZone(AssetDumpingContext& context) const DUMP_ASSET_POOL(AssetDumperXModel, m_xmodel, ASSET_TYPE_XMODEL) DUMP_ASSET_POOL(AssetDumperMaterial, m_material, ASSET_TYPE_MATERIAL) DUMP_ASSET_POOL(AssetDumperTechniqueSet, m_technique_set, ASSET_TYPE_TECHNIQUE_SET) - DUMP_ASSET_POOL(AssetDumperGfxImage, m_image, ASSET_TYPE_IMAGE) + DUMP_ASSET_POOL(image::Dumper, m_image, ASSET_TYPE_IMAGE) DUMP_ASSET_POOL(AssetDumperSndBank, m_sound_bank, ASSET_TYPE_SOUND) // DUMP_ASSET_POOL(AssetDumperSndPatch, m_sound_patch, ASSET_TYPE_SOUND_PATCH) // DUMP_ASSET_POOL(AssetDumperClipMap, m_clip_map, ASSET_TYPE_CLIPMAP_PVS)