mirror of
https://github.com/Laupetin/OpenAssetTools.git
synced 2026-01-08 17:51:49 +00:00
chore: update image namespacing
This commit is contained in:
@@ -38,11 +38,13 @@ function ImageConverter:project()
|
|||||||
|
|
||||||
self:include(includes)
|
self:include(includes)
|
||||||
Utils:include(includes)
|
Utils:include(includes)
|
||||||
|
Common:include(includes)
|
||||||
ObjImage:include(includes)
|
ObjImage:include(includes)
|
||||||
|
|
||||||
Raw:use()
|
Raw:use()
|
||||||
|
|
||||||
links:linkto(Utils)
|
links:linkto(Utils)
|
||||||
|
links:linkto(Common)
|
||||||
links:linkto(ObjImage)
|
links:linkto(ObjImage)
|
||||||
links:linkall()
|
links:linkall()
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
#include "ImageConverter.h"
|
#include "ImageConverter.h"
|
||||||
|
|
||||||
|
#include "Game/IGame.h"
|
||||||
#include "Image/DdsLoader.h"
|
#include "Image/DdsLoader.h"
|
||||||
#include "Image/DdsWriter.h"
|
#include "Image/DdsWriter.h"
|
||||||
#include "Image/IwiLoader.h"
|
#include "Image/IwiLoader.h"
|
||||||
@@ -17,10 +18,12 @@
|
|||||||
#include <format>
|
#include <format>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#include <optional>
|
||||||
|
|
||||||
namespace fs = std::filesystem;
|
namespace fs = std::filesystem;
|
||||||
|
using namespace image;
|
||||||
|
|
||||||
namespace image_converter
|
namespace
|
||||||
{
|
{
|
||||||
constexpr auto EXTENSION_IWI = ".iwi";
|
constexpr auto EXTENSION_IWI = ".iwi";
|
||||||
constexpr auto EXTENSION_DDS = ".dds";
|
constexpr auto EXTENSION_DDS = ".dds";
|
||||||
@@ -29,7 +32,7 @@ namespace image_converter
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ImageConverterImpl()
|
ImageConverterImpl()
|
||||||
: m_game_to_convert_to(image_converter::Game::UNKNOWN)
|
: m_game_to_convert_to(std::nullopt)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -76,7 +79,7 @@ namespace image_converter
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
const auto texture = iwi::LoadIwi(file);
|
const auto texture = image::LoadIwi(file);
|
||||||
if (!texture)
|
if (!texture)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
@@ -103,7 +106,7 @@ namespace image_converter
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
const auto texture = dds::LoadDds(file);
|
const auto texture = image::LoadDds(file);
|
||||||
if (!texture)
|
if (!texture)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
@@ -129,23 +132,23 @@ namespace image_converter
|
|||||||
if (m_iwi_writer)
|
if (m_iwi_writer)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
if (m_game_to_convert_to == Game::UNKNOWN && !ShowGameTui())
|
if (!m_game_to_convert_to && !ShowGameTui())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
switch (m_game_to_convert_to)
|
switch (*m_game_to_convert_to)
|
||||||
{
|
{
|
||||||
case Game::IW3:
|
case GameId::IW3:
|
||||||
m_iwi_writer = std::make_unique<iwi6::IwiWriter>();
|
m_iwi_writer = std::make_unique<image::iwi6::IwiWriter>();
|
||||||
break;
|
break;
|
||||||
case Game::IW4:
|
case GameId::IW4:
|
||||||
case Game::IW5:
|
case GameId::IW5:
|
||||||
m_iwi_writer = std::make_unique<iwi8::IwiWriter>();
|
m_iwi_writer = std::make_unique<image::iwi8::IwiWriter>();
|
||||||
break;
|
break;
|
||||||
case Game::T5:
|
case GameId::T5:
|
||||||
m_iwi_writer = std::make_unique<iwi13::IwiWriter>();
|
m_iwi_writer = std::make_unique<image::iwi13::IwiWriter>();
|
||||||
break;
|
break;
|
||||||
case Game::T6:
|
case GameId::T6:
|
||||||
m_iwi_writer = std::make_unique<iwi27::IwiWriter>();
|
m_iwi_writer = std::make_unique<image::iwi27::IwiWriter>();
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
assert(false);
|
assert(false);
|
||||||
@@ -170,19 +173,19 @@ namespace image_converter
|
|||||||
switch (num)
|
switch (num)
|
||||||
{
|
{
|
||||||
case 1:
|
case 1:
|
||||||
m_game_to_convert_to = Game::IW3;
|
m_game_to_convert_to = GameId::IW3;
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
m_game_to_convert_to = Game::IW4;
|
m_game_to_convert_to = GameId::IW4;
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
m_game_to_convert_to = Game::IW5;
|
m_game_to_convert_to = GameId::IW5;
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
m_game_to_convert_to = Game::T5;
|
m_game_to_convert_to = GameId::T5;
|
||||||
break;
|
break;
|
||||||
case 5:
|
case 5:
|
||||||
m_game_to_convert_to = Game::T6;
|
m_game_to_convert_to = GameId::T6;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
con::error("Invalid input");
|
con::error("Invalid input");
|
||||||
@@ -193,13 +196,13 @@ namespace image_converter
|
|||||||
}
|
}
|
||||||
|
|
||||||
ImageConverterArgs m_args;
|
ImageConverterArgs m_args;
|
||||||
image_converter::Game m_game_to_convert_to;
|
std::optional<GameId> m_game_to_convert_to;
|
||||||
DdsWriter m_dds_writer;
|
DdsWriter m_dds_writer;
|
||||||
std::unique_ptr<IImageWriter> m_iwi_writer;
|
std::unique_ptr<ImageWriter> m_iwi_writer;
|
||||||
};
|
};
|
||||||
} // namespace image_converter
|
} // namespace
|
||||||
|
|
||||||
std::unique_ptr<ImageConverter> ImageConverter::Create()
|
std::unique_ptr<ImageConverter> ImageConverter::Create()
|
||||||
{
|
{
|
||||||
return std::make_unique<image_converter::ImageConverterImpl>();
|
return std::make_unique<ImageConverterImpl>();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -86,7 +86,7 @@ const CommandLineOption* const COMMAND_LINE_OPTIONS[]{
|
|||||||
};
|
};
|
||||||
|
|
||||||
ImageConverterArgs::ImageConverterArgs()
|
ImageConverterArgs::ImageConverterArgs()
|
||||||
: m_game_to_convert_to(image_converter::Game::UNKNOWN),
|
: m_game_to_convert_to(std::nullopt),
|
||||||
m_argument_parser(COMMAND_LINE_OPTIONS, std::extent_v<decltype(COMMAND_LINE_OPTIONS)>)
|
m_argument_parser(COMMAND_LINE_OPTIONS, std::extent_v<decltype(COMMAND_LINE_OPTIONS)>)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,24 +1,13 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "Game/IGame.h"
|
||||||
#include "Utils/Arguments/ArgumentParser.h"
|
#include "Utils/Arguments/ArgumentParser.h"
|
||||||
|
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
|
#include <optional>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
namespace image_converter
|
|
||||||
{
|
|
||||||
enum class Game : std::uint8_t
|
|
||||||
{
|
|
||||||
UNKNOWN,
|
|
||||||
IW3,
|
|
||||||
IW4,
|
|
||||||
IW5,
|
|
||||||
T5,
|
|
||||||
T6
|
|
||||||
};
|
|
||||||
} // namespace image_converter
|
|
||||||
|
|
||||||
class ImageConverterArgs
|
class ImageConverterArgs
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -26,7 +15,7 @@ public:
|
|||||||
bool ParseArgs(int argc, const char** argv, bool& shouldContinue);
|
bool ParseArgs(int argc, const char** argv, bool& shouldContinue);
|
||||||
|
|
||||||
std::vector<std::string> m_files_to_convert;
|
std::vector<std::string> m_files_to_convert;
|
||||||
image_converter::Game m_game_to_convert_to;
|
std::optional<GameId> m_game_to_convert_to;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -9,7 +9,9 @@
|
|||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
namespace dds
|
using namespace image;
|
||||||
|
|
||||||
|
namespace
|
||||||
{
|
{
|
||||||
class DdsLoaderInternal
|
class DdsLoaderInternal
|
||||||
{
|
{
|
||||||
@@ -193,7 +195,7 @@ namespace dds
|
|||||||
return ReadPixelFormatUnsigned(pf);
|
return ReadPixelFormatUnsigned(pf);
|
||||||
}
|
}
|
||||||
|
|
||||||
_NODISCARD bool ReadHeader()
|
[[nodiscard]] bool ReadHeader()
|
||||||
{
|
{
|
||||||
DDS_HEADER header{};
|
DDS_HEADER header{};
|
||||||
m_stream.read(reinterpret_cast<char*>(&header), sizeof(header));
|
m_stream.read(reinterpret_cast<char*>(&header), sizeof(header));
|
||||||
@@ -277,10 +279,13 @@ namespace dds
|
|||||||
unsigned m_depth;
|
unsigned m_depth;
|
||||||
const ImageFormat* m_format;
|
const ImageFormat* m_format;
|
||||||
};
|
};
|
||||||
|
} // namespace
|
||||||
|
|
||||||
|
namespace image
|
||||||
|
{
|
||||||
std::unique_ptr<Texture> LoadDds(std::istream& stream)
|
std::unique_ptr<Texture> LoadDds(std::istream& stream)
|
||||||
{
|
{
|
||||||
DdsLoaderInternal internal(stream);
|
DdsLoaderInternal internal(stream);
|
||||||
return internal.LoadDds();
|
return internal.LoadDds();
|
||||||
}
|
}
|
||||||
} // namespace dds
|
} // namespace image
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
#include <istream>
|
#include <istream>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
namespace dds
|
namespace image
|
||||||
{
|
{
|
||||||
std::unique_ptr<Texture> LoadDds(std::istream& stream);
|
std::unique_ptr<Texture> LoadDds(std::istream& stream);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,8 @@
|
|||||||
|
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
|
|
||||||
|
namespace image
|
||||||
|
{
|
||||||
constexpr uint32_t MakeFourCc(const char ch0, const char ch1, const char ch2, const char ch3)
|
constexpr uint32_t MakeFourCc(const char ch0, const char ch1, const char ch2, const char ch3)
|
||||||
{
|
{
|
||||||
return static_cast<uint32_t>(ch0) | static_cast<uint32_t>(ch1) << 8 | static_cast<uint32_t>(ch2) << 16 | static_cast<uint32_t>(ch3) << 24;
|
return static_cast<uint32_t>(ch0) | static_cast<uint32_t>(ch1) << 8 | static_cast<uint32_t>(ch2) << 16 | static_cast<uint32_t>(ch3) << 24;
|
||||||
@@ -109,3 +111,5 @@ struct DDS_HEADER_DXT10
|
|||||||
uint32_t arraySize;
|
uint32_t arraySize;
|
||||||
uint32_t miscFlags2;
|
uint32_t miscFlags2;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
} // namespace image
|
||||||
|
|||||||
@@ -7,6 +7,10 @@
|
|||||||
#include <map>
|
#include <map>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
|
using namespace image;
|
||||||
|
|
||||||
|
namespace
|
||||||
|
{
|
||||||
const std::map<ImageFormatId, ImageFormatId> DDS_CONVERSION_TABLE{
|
const std::map<ImageFormatId, ImageFormatId> DDS_CONVERSION_TABLE{
|
||||||
{ImageFormatId::R8_G8_B8, ImageFormatId::B8_G8_R8_X8},
|
{ImageFormatId::R8_G8_B8, ImageFormatId::B8_G8_R8_X8},
|
||||||
};
|
};
|
||||||
@@ -220,7 +224,10 @@ public:
|
|||||||
std::unique_ptr<Texture> m_converted_texture;
|
std::unique_ptr<Texture> m_converted_texture;
|
||||||
bool m_use_dx10_extension;
|
bool m_use_dx10_extension;
|
||||||
};
|
};
|
||||||
|
} // namespace
|
||||||
|
|
||||||
|
namespace image
|
||||||
|
{
|
||||||
DdsWriter::~DdsWriter() = default;
|
DdsWriter::~DdsWriter() = default;
|
||||||
|
|
||||||
bool DdsWriter::SupportsImageFormat(const ImageFormat* imageFormat)
|
bool DdsWriter::SupportsImageFormat(const ImageFormat* imageFormat)
|
||||||
@@ -238,3 +245,4 @@ void DdsWriter::DumpImage(std::ostream& stream, const Texture* texture)
|
|||||||
DdsWriterInternal internal(stream, texture);
|
DdsWriterInternal internal(stream, texture);
|
||||||
internal.DumpImage();
|
internal.DumpImage();
|
||||||
}
|
}
|
||||||
|
} // namespace image
|
||||||
|
|||||||
@@ -1,7 +1,10 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include "IImageWriter.h"
|
|
||||||
|
|
||||||
class DdsWriter final : public IImageWriter
|
#include "ImageWriter.h"
|
||||||
|
|
||||||
|
namespace image
|
||||||
|
{
|
||||||
|
class DdsWriter final : public ImageWriter
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
~DdsWriter() override;
|
~DdsWriter() override;
|
||||||
@@ -10,3 +13,4 @@ public:
|
|||||||
std::string GetFileExtension() override;
|
std::string GetFileExtension() override;
|
||||||
void DumpImage(std::ostream& stream, const Texture* texture) override;
|
void DumpImage(std::ostream& stream, const Texture* texture) override;
|
||||||
};
|
};
|
||||||
|
} // namespace image
|
||||||
|
|||||||
@@ -2,6 +2,8 @@
|
|||||||
|
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
|
||||||
|
namespace image
|
||||||
|
{
|
||||||
Dx12TextureLoader::Dx12TextureLoader()
|
Dx12TextureLoader::Dx12TextureLoader()
|
||||||
: m_format(oat::DXGI_FORMAT_UNKNOWN),
|
: m_format(oat::DXGI_FORMAT_UNKNOWN),
|
||||||
m_type(TextureType::T_2D),
|
m_type(TextureType::T_2D),
|
||||||
@@ -102,3 +104,4 @@ std::unique_ptr<Texture> Dx12TextureLoader::LoadTexture(const void* data)
|
|||||||
|
|
||||||
return texture;
|
return texture;
|
||||||
}
|
}
|
||||||
|
} // namespace image
|
||||||
|
|||||||
@@ -6,6 +6,8 @@
|
|||||||
#include <memory>
|
#include <memory>
|
||||||
#include <unordered_map>
|
#include <unordered_map>
|
||||||
|
|
||||||
|
namespace image
|
||||||
|
{
|
||||||
class Dx12TextureLoader
|
class Dx12TextureLoader
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -32,3 +34,4 @@ private:
|
|||||||
unsigned m_height;
|
unsigned m_height;
|
||||||
unsigned m_depth;
|
unsigned m_depth;
|
||||||
};
|
};
|
||||||
|
} // namespace image
|
||||||
|
|||||||
@@ -2,6 +2,8 @@
|
|||||||
|
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
|
||||||
|
namespace image
|
||||||
|
{
|
||||||
Dx9TextureLoader::Dx9TextureLoader()
|
Dx9TextureLoader::Dx9TextureLoader()
|
||||||
: m_format(oat::D3DFMT_UNKNOWN),
|
: m_format(oat::D3DFMT_UNKNOWN),
|
||||||
m_type(TextureType::T_2D),
|
m_type(TextureType::T_2D),
|
||||||
@@ -102,3 +104,4 @@ std::unique_ptr<Texture> Dx9TextureLoader::LoadTexture(const void* data)
|
|||||||
|
|
||||||
return texture;
|
return texture;
|
||||||
}
|
}
|
||||||
|
} // namespace image
|
||||||
|
|||||||
@@ -5,6 +5,8 @@
|
|||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
|
namespace image
|
||||||
|
{
|
||||||
class Dx9TextureLoader
|
class Dx9TextureLoader
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -29,3 +31,4 @@ private:
|
|||||||
unsigned m_height;
|
unsigned m_height;
|
||||||
unsigned m_depth;
|
unsigned m_depth;
|
||||||
};
|
};
|
||||||
|
} // namespace image
|
||||||
|
|||||||
@@ -1,21 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include "Image/Texture.h"
|
|
||||||
|
|
||||||
#include <ostream>
|
|
||||||
#include <string>
|
|
||||||
|
|
||||||
class IImageWriter
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
IImageWriter() = default;
|
|
||||||
virtual ~IImageWriter() = default;
|
|
||||||
IImageWriter(const IImageWriter& other) = default;
|
|
||||||
IImageWriter(IImageWriter&& other) noexcept = default;
|
|
||||||
IImageWriter& operator=(const IImageWriter& other) = default;
|
|
||||||
IImageWriter& operator=(IImageWriter&& other) noexcept = default;
|
|
||||||
|
|
||||||
virtual bool SupportsImageFormat(const ImageFormat* imageFormat) = 0;
|
|
||||||
virtual std::string GetFileExtension() = 0;
|
|
||||||
virtual void DumpImage(std::ostream& stream, const Texture* texture) = 0;
|
|
||||||
};
|
|
||||||
@@ -1,5 +1,7 @@
|
|||||||
#include "ImageFormat.h"
|
#include "ImageFormat.h"
|
||||||
|
|
||||||
|
namespace image
|
||||||
|
{
|
||||||
ImageFormat::ImageFormat(const ImageFormatId id, const oat::D3DFORMAT d3dFormat, const oat::DXGI_FORMAT dxgiFormat)
|
ImageFormat::ImageFormat(const ImageFormatId id, const oat::D3DFORMAT d3dFormat, const oat::DXGI_FORMAT dxgiFormat)
|
||||||
: m_id(id),
|
: m_id(id),
|
||||||
m_d3d_format(d3dFormat),
|
m_d3d_format(d3dFormat),
|
||||||
@@ -173,3 +175,4 @@ const ImageFormat* const ImageFormat::ALL_FORMATS[static_cast<unsigned>(ImageFor
|
|||||||
&FORMAT_BC4,
|
&FORMAT_BC4,
|
||||||
&FORMAT_BC5,
|
&FORMAT_BC5,
|
||||||
};
|
};
|
||||||
|
} // namespace image
|
||||||
|
|||||||
@@ -6,6 +6,8 @@
|
|||||||
#include <cstddef>
|
#include <cstddef>
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
|
|
||||||
|
namespace image
|
||||||
|
{
|
||||||
enum class ImageFormatId
|
enum class ImageFormatId
|
||||||
{
|
{
|
||||||
UNKNOWN = -1,
|
UNKNOWN = -1,
|
||||||
@@ -120,3 +122,4 @@ public:
|
|||||||
[[nodiscard]] size_t GetPitch(unsigned mipLevel, unsigned width) const override;
|
[[nodiscard]] size_t GetPitch(unsigned mipLevel, unsigned width) const override;
|
||||||
[[nodiscard]] size_t GetSizeOfMipLevel(unsigned mipLevel, unsigned width, unsigned height, unsigned depth) const override;
|
[[nodiscard]] size_t GetSizeOfMipLevel(unsigned mipLevel, unsigned width, unsigned height, unsigned depth) const override;
|
||||||
};
|
};
|
||||||
|
} // namespace image
|
||||||
|
|||||||
24
src/ObjImage/Image/ImageWriter.h
Normal file
24
src/ObjImage/Image/ImageWriter.h
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "Image/Texture.h"
|
||||||
|
|
||||||
|
#include <ostream>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
namespace image
|
||||||
|
{
|
||||||
|
class ImageWriter
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
ImageWriter() = default;
|
||||||
|
virtual ~ImageWriter() = default;
|
||||||
|
ImageWriter(const ImageWriter& other) = default;
|
||||||
|
ImageWriter(ImageWriter&& other) noexcept = default;
|
||||||
|
ImageWriter& operator=(const ImageWriter& other) = default;
|
||||||
|
ImageWriter& operator=(ImageWriter&& other) noexcept = default;
|
||||||
|
|
||||||
|
virtual bool SupportsImageFormat(const ImageFormat* imageFormat) = 0;
|
||||||
|
virtual std::string GetFileExtension() = 0;
|
||||||
|
virtual void DumpImage(std::ostream& stream, const Texture* texture) = 0;
|
||||||
|
};
|
||||||
|
} // namespace image
|
||||||
@@ -8,7 +8,9 @@
|
|||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <type_traits>
|
#include <type_traits>
|
||||||
|
|
||||||
namespace iwi
|
using namespace image;
|
||||||
|
|
||||||
|
namespace
|
||||||
{
|
{
|
||||||
const ImageFormat* GetFormat6(int8_t format)
|
const ImageFormat* GetFormat6(int8_t format)
|
||||||
{
|
{
|
||||||
@@ -74,7 +76,7 @@ namespace iwi
|
|||||||
|
|
||||||
texture->Allocate();
|
texture->Allocate();
|
||||||
|
|
||||||
auto currentFileSize = sizeof(iwi6::IwiHeader) + sizeof(IwiVersion);
|
auto currentFileSize = sizeof(iwi6::IwiHeader) + sizeof(IwiVersionHeader);
|
||||||
const auto mipMapCount = hasMipMaps ? texture->GetMipMapCount() : 1;
|
const auto mipMapCount = hasMipMaps ? texture->GetMipMapCount() : 1;
|
||||||
|
|
||||||
for (auto currentMipLevel = mipMapCount - 1; currentMipLevel >= 0; currentMipLevel--)
|
for (auto currentMipLevel = mipMapCount - 1; currentMipLevel >= 0; currentMipLevel--)
|
||||||
@@ -188,7 +190,7 @@ namespace iwi
|
|||||||
|
|
||||||
texture->Allocate();
|
texture->Allocate();
|
||||||
|
|
||||||
auto currentFileSize = sizeof(iwi8::IwiHeader) + sizeof(IwiVersion);
|
auto currentFileSize = sizeof(iwi8::IwiHeader) + sizeof(IwiVersionHeader);
|
||||||
const auto mipMapCount = hasMipMaps ? texture->GetMipMapCount() : 1;
|
const auto mipMapCount = hasMipMaps ? texture->GetMipMapCount() : 1;
|
||||||
|
|
||||||
for (auto currentMipLevel = mipMapCount - 1; currentMipLevel >= 0; currentMipLevel--)
|
for (auto currentMipLevel = mipMapCount - 1; currentMipLevel >= 0; currentMipLevel--)
|
||||||
@@ -283,7 +285,7 @@ namespace iwi
|
|||||||
|
|
||||||
texture->Allocate();
|
texture->Allocate();
|
||||||
|
|
||||||
auto currentFileSize = sizeof(iwi13::IwiHeader) + sizeof(IwiVersion);
|
auto currentFileSize = sizeof(iwi13::IwiHeader) + sizeof(IwiVersionHeader);
|
||||||
const auto mipMapCount = hasMipMaps ? texture->GetMipMapCount() : 1;
|
const auto mipMapCount = hasMipMaps ? texture->GetMipMapCount() : 1;
|
||||||
|
|
||||||
for (auto currentMipLevel = mipMapCount - 1; currentMipLevel >= 0; currentMipLevel--)
|
for (auto currentMipLevel = mipMapCount - 1; currentMipLevel >= 0; currentMipLevel--)
|
||||||
@@ -380,7 +382,7 @@ namespace iwi
|
|||||||
|
|
||||||
texture->Allocate();
|
texture->Allocate();
|
||||||
|
|
||||||
auto currentFileSize = sizeof(iwi27::IwiHeader) + sizeof(IwiVersion);
|
auto currentFileSize = sizeof(iwi27::IwiHeader) + sizeof(IwiVersionHeader);
|
||||||
const auto mipMapCount = hasMipMaps ? texture->GetMipMapCount() : 1;
|
const auto mipMapCount = hasMipMaps ? texture->GetMipMapCount() : 1;
|
||||||
|
|
||||||
for (auto currentMipLevel = mipMapCount - 1; currentMipLevel >= 0; currentMipLevel--)
|
for (auto currentMipLevel = mipMapCount - 1; currentMipLevel >= 0; currentMipLevel--)
|
||||||
@@ -405,22 +407,25 @@ namespace iwi
|
|||||||
|
|
||||||
return texture;
|
return texture;
|
||||||
}
|
}
|
||||||
|
} // namespace
|
||||||
|
|
||||||
|
namespace image
|
||||||
|
{
|
||||||
std::unique_ptr<Texture> LoadIwi(std::istream& stream)
|
std::unique_ptr<Texture> LoadIwi(std::istream& stream)
|
||||||
{
|
{
|
||||||
IwiVersion iwiVersion{};
|
IwiVersionHeader iwiVersionHeader{};
|
||||||
|
|
||||||
stream.read(reinterpret_cast<char*>(&iwiVersion), sizeof(iwiVersion));
|
stream.read(reinterpret_cast<char*>(&iwiVersionHeader), sizeof(iwiVersionHeader));
|
||||||
if (stream.gcount() != sizeof(iwiVersion))
|
if (stream.gcount() != sizeof(iwiVersionHeader))
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
|
||||||
if (iwiVersion.tag[0] != 'I' || iwiVersion.tag[1] != 'W' || iwiVersion.tag[2] != 'i')
|
if (iwiVersionHeader.tag[0] != 'I' || iwiVersionHeader.tag[1] != 'W' || iwiVersionHeader.tag[2] != 'i')
|
||||||
{
|
{
|
||||||
con::error("Invalid IWI magic");
|
con::error("Invalid IWI magic");
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (iwiVersion.version)
|
switch (iwiVersionHeader.version)
|
||||||
{
|
{
|
||||||
case 6:
|
case 6:
|
||||||
return LoadIwi6(stream);
|
return LoadIwi6(stream);
|
||||||
@@ -438,7 +443,7 @@ namespace iwi
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
con::error("Unknown IWI version {}", iwiVersion.version);
|
con::error("Unknown IWI version {}", iwiVersionHeader.version);
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
} // namespace iwi
|
} // namespace image
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
#include <istream>
|
#include <istream>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
namespace iwi
|
namespace image
|
||||||
{
|
{
|
||||||
std::unique_ptr<Texture> LoadIwi(std::istream& stream);
|
std::unique_ptr<Texture> LoadIwi(std::istream& stream);
|
||||||
}; // namespace iwi
|
}; // namespace image
|
||||||
|
|||||||
@@ -2,13 +2,26 @@
|
|||||||
|
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
|
|
||||||
struct IwiVersion
|
namespace image
|
||||||
|
{
|
||||||
|
enum class IwiVersion : std::uint8_t
|
||||||
|
{
|
||||||
|
// IW3
|
||||||
|
IWI_6 = 6,
|
||||||
|
// IW4, IW5
|
||||||
|
IWI_8 = 8,
|
||||||
|
// T5
|
||||||
|
IWI_13 = 13,
|
||||||
|
// T6
|
||||||
|
IWI_27 = 27
|
||||||
|
};
|
||||||
|
|
||||||
|
struct IwiVersionHeader
|
||||||
{
|
{
|
||||||
char tag[3];
|
char tag[3];
|
||||||
char version;
|
char version;
|
||||||
};
|
};
|
||||||
|
|
||||||
// IW3
|
|
||||||
namespace iwi6
|
namespace iwi6
|
||||||
{
|
{
|
||||||
struct IwiHeader
|
struct IwiHeader
|
||||||
@@ -56,7 +69,6 @@ namespace iwi6
|
|||||||
};
|
};
|
||||||
} // namespace iwi6
|
} // namespace iwi6
|
||||||
|
|
||||||
// IW4
|
|
||||||
namespace iwi8
|
namespace iwi8
|
||||||
{
|
{
|
||||||
struct IwiHeader
|
struct IwiHeader
|
||||||
@@ -124,7 +136,6 @@ namespace iwi8
|
|||||||
};
|
};
|
||||||
} // namespace iwi8
|
} // namespace iwi8
|
||||||
|
|
||||||
// T5
|
|
||||||
namespace iwi13
|
namespace iwi13
|
||||||
{
|
{
|
||||||
struct IwiHeader
|
struct IwiHeader
|
||||||
@@ -179,7 +190,6 @@ namespace iwi13
|
|||||||
|
|
||||||
} // namespace iwi13
|
} // namespace iwi13
|
||||||
|
|
||||||
// T6
|
|
||||||
namespace iwi27
|
namespace iwi27
|
||||||
{
|
{
|
||||||
struct IwiHeader
|
struct IwiHeader
|
||||||
@@ -233,3 +243,4 @@ namespace iwi27
|
|||||||
};
|
};
|
||||||
|
|
||||||
} // namespace iwi27
|
} // namespace iwi27
|
||||||
|
} // namespace image
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
#include <cassert>
|
#include <cassert>
|
||||||
#include <ostream>
|
#include <ostream>
|
||||||
|
|
||||||
using namespace iwi13;
|
using namespace image::iwi13;
|
||||||
|
|
||||||
IwiWriter::IwiWriter() = default;
|
IwiWriter::IwiWriter() = default;
|
||||||
|
|
||||||
@@ -54,13 +54,13 @@ std::string IwiWriter::GetFileExtension()
|
|||||||
|
|
||||||
void IwiWriter::WriteVersion(std::ostream& stream)
|
void IwiWriter::WriteVersion(std::ostream& stream)
|
||||||
{
|
{
|
||||||
IwiVersion version{};
|
IwiVersionHeader version{};
|
||||||
version.tag[0] = 'I';
|
version.tag[0] = 'I';
|
||||||
version.tag[1] = 'W';
|
version.tag[1] = 'W';
|
||||||
version.tag[2] = 'i';
|
version.tag[2] = 'i';
|
||||||
version.version = 13;
|
version.version = 13;
|
||||||
|
|
||||||
stream.write(reinterpret_cast<char*>(&version), sizeof(IwiVersion));
|
stream.write(reinterpret_cast<char*>(&version), sizeof(IwiVersionHeader));
|
||||||
}
|
}
|
||||||
|
|
||||||
void IwiWriter::FillHeader2D(IwiHeader& header, const Texture2D& texture)
|
void IwiWriter::FillHeader2D(IwiHeader& header, const Texture2D& texture)
|
||||||
@@ -101,7 +101,7 @@ void IwiWriter::DumpImage(std::ostream& stream, const Texture* texture)
|
|||||||
if (!texture->HasMipMaps())
|
if (!texture->HasMipMaps())
|
||||||
header.flags |= IMG_FLAG_NOMIPMAPS;
|
header.flags |= IMG_FLAG_NOMIPMAPS;
|
||||||
|
|
||||||
auto currentFileSize = sizeof(IwiVersion) + sizeof(IwiHeader);
|
auto currentFileSize = sizeof(IwiVersionHeader) + sizeof(IwiHeader);
|
||||||
|
|
||||||
const auto textureMipCount = texture->HasMipMaps() ? texture->GetMipMapCount() : 1;
|
const auto textureMipCount = texture->HasMipMaps() ? texture->GetMipMapCount() : 1;
|
||||||
for (auto currentMipLevel = textureMipCount - 1; currentMipLevel >= 0; currentMipLevel--)
|
for (auto currentMipLevel = textureMipCount - 1; currentMipLevel >= 0; currentMipLevel--)
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "IImageWriter.h"
|
|
||||||
#include "Image/IwiTypes.h"
|
#include "Image/IwiTypes.h"
|
||||||
|
#include "ImageWriter.h"
|
||||||
|
|
||||||
namespace iwi13
|
namespace image::iwi13
|
||||||
{
|
{
|
||||||
class IwiWriter final : public IImageWriter
|
class IwiWriter final : public ImageWriter
|
||||||
{
|
{
|
||||||
static IwiFormat GetIwiFormatForImageFormat(const ImageFormat* imageFormat);
|
static IwiFormat GetIwiFormatForImageFormat(const ImageFormat* imageFormat);
|
||||||
|
|
||||||
@@ -27,4 +27,4 @@ namespace iwi13
|
|||||||
std::string GetFileExtension() override;
|
std::string GetFileExtension() override;
|
||||||
void DumpImage(std::ostream& stream, const Texture* texture) override;
|
void DumpImage(std::ostream& stream, const Texture* texture) override;
|
||||||
};
|
};
|
||||||
} // namespace iwi13
|
} // namespace image::iwi13
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
#include <cassert>
|
#include <cassert>
|
||||||
#include <ostream>
|
#include <ostream>
|
||||||
|
|
||||||
using namespace iwi27;
|
using namespace image::iwi27;
|
||||||
|
|
||||||
IwiWriter::IwiWriter() = default;
|
IwiWriter::IwiWriter() = default;
|
||||||
|
|
||||||
@@ -54,13 +54,13 @@ std::string IwiWriter::GetFileExtension()
|
|||||||
|
|
||||||
void IwiWriter::WriteVersion(std::ostream& stream)
|
void IwiWriter::WriteVersion(std::ostream& stream)
|
||||||
{
|
{
|
||||||
IwiVersion version{};
|
IwiVersionHeader version{};
|
||||||
version.tag[0] = 'I';
|
version.tag[0] = 'I';
|
||||||
version.tag[1] = 'W';
|
version.tag[1] = 'W';
|
||||||
version.tag[2] = 'i';
|
version.tag[2] = 'i';
|
||||||
version.version = 27;
|
version.version = 27;
|
||||||
|
|
||||||
stream.write(reinterpret_cast<char*>(&version), sizeof(IwiVersion));
|
stream.write(reinterpret_cast<char*>(&version), sizeof(IwiVersionHeader));
|
||||||
}
|
}
|
||||||
|
|
||||||
void IwiWriter::FillHeader2D(IwiHeader& header, const Texture2D& texture)
|
void IwiWriter::FillHeader2D(IwiHeader& header, const Texture2D& texture)
|
||||||
@@ -104,7 +104,7 @@ void IwiWriter::DumpImage(std::ostream& stream, const Texture* texture)
|
|||||||
for (auto& i : header.maxGlossForMip)
|
for (auto& i : header.maxGlossForMip)
|
||||||
i = 0;
|
i = 0;
|
||||||
|
|
||||||
auto currentFileSize = sizeof(IwiVersion) + sizeof(IwiHeader);
|
auto currentFileSize = sizeof(IwiVersionHeader) + sizeof(IwiHeader);
|
||||||
|
|
||||||
const auto textureMipCount = texture->HasMipMaps() ? texture->GetMipMapCount() : 1;
|
const auto textureMipCount = texture->HasMipMaps() ? texture->GetMipMapCount() : 1;
|
||||||
for (auto currentMipLevel = textureMipCount - 1; currentMipLevel >= 0; currentMipLevel--)
|
for (auto currentMipLevel = textureMipCount - 1; currentMipLevel >= 0; currentMipLevel--)
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "IImageWriter.h"
|
|
||||||
#include "Image/IwiTypes.h"
|
#include "Image/IwiTypes.h"
|
||||||
|
#include "ImageWriter.h"
|
||||||
|
|
||||||
namespace iwi27
|
namespace image::iwi27
|
||||||
{
|
{
|
||||||
class IwiWriter final : public IImageWriter
|
class IwiWriter final : public ImageWriter
|
||||||
{
|
{
|
||||||
static IwiFormat GetIwiFormatForImageFormat(const ImageFormat* imageFormat);
|
static IwiFormat GetIwiFormatForImageFormat(const ImageFormat* imageFormat);
|
||||||
|
|
||||||
@@ -27,4 +27,4 @@ namespace iwi27
|
|||||||
std::string GetFileExtension() override;
|
std::string GetFileExtension() override;
|
||||||
void DumpImage(std::ostream& stream, const Texture* texture) override;
|
void DumpImage(std::ostream& stream, const Texture* texture) override;
|
||||||
};
|
};
|
||||||
} // namespace iwi27
|
} // namespace image::iwi27
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
|
|
||||||
using namespace iwi6;
|
using namespace image::iwi6;
|
||||||
|
|
||||||
IwiWriter::IwiWriter() = default;
|
IwiWriter::IwiWriter() = default;
|
||||||
|
|
||||||
@@ -40,13 +40,13 @@ IwiFormat IwiWriter::GetIwiFormatForImageFormat(const ImageFormat* imageFormat)
|
|||||||
|
|
||||||
void IwiWriter::WriteVersion(std::ostream& stream)
|
void IwiWriter::WriteVersion(std::ostream& stream)
|
||||||
{
|
{
|
||||||
IwiVersion version{};
|
IwiVersionHeader version{};
|
||||||
version.tag[0] = 'I';
|
version.tag[0] = 'I';
|
||||||
version.tag[1] = 'W';
|
version.tag[1] = 'W';
|
||||||
version.tag[2] = 'i';
|
version.tag[2] = 'i';
|
||||||
version.version = 6;
|
version.version = 6;
|
||||||
|
|
||||||
stream.write(reinterpret_cast<char*>(&version), sizeof(IwiVersion));
|
stream.write(reinterpret_cast<char*>(&version), sizeof(IwiVersionHeader));
|
||||||
}
|
}
|
||||||
|
|
||||||
void IwiWriter::FillHeader2D(IwiHeader& header, const Texture2D& texture)
|
void IwiWriter::FillHeader2D(IwiHeader& header, const Texture2D& texture)
|
||||||
@@ -96,7 +96,7 @@ void IwiWriter::DumpImage(std::ostream& stream, const Texture* texture)
|
|||||||
if (!texture->HasMipMaps())
|
if (!texture->HasMipMaps())
|
||||||
header.flags |= IMG_FLAG_NOMIPMAPS;
|
header.flags |= IMG_FLAG_NOMIPMAPS;
|
||||||
|
|
||||||
auto currentFileSize = sizeof(IwiVersion) + sizeof(IwiHeader);
|
auto currentFileSize = sizeof(IwiVersionHeader) + sizeof(IwiHeader);
|
||||||
|
|
||||||
const auto textureMipCount = texture->HasMipMaps() ? texture->GetMipMapCount() : 1;
|
const auto textureMipCount = texture->HasMipMaps() ? texture->GetMipMapCount() : 1;
|
||||||
for (auto currentMipLevel = textureMipCount - 1; currentMipLevel >= 0; currentMipLevel--)
|
for (auto currentMipLevel = textureMipCount - 1; currentMipLevel >= 0; currentMipLevel--)
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "IImageWriter.h"
|
|
||||||
#include "Image/IwiTypes.h"
|
#include "Image/IwiTypes.h"
|
||||||
|
#include "ImageWriter.h"
|
||||||
|
|
||||||
namespace iwi6
|
namespace image::iwi6
|
||||||
{
|
{
|
||||||
class IwiWriter final : public IImageWriter
|
class IwiWriter final : public ImageWriter
|
||||||
{
|
{
|
||||||
static IwiFormat GetIwiFormatForImageFormat(const ImageFormat* imageFormat);
|
static IwiFormat GetIwiFormatForImageFormat(const ImageFormat* imageFormat);
|
||||||
|
|
||||||
@@ -27,4 +27,4 @@ namespace iwi6
|
|||||||
std::string GetFileExtension() override;
|
std::string GetFileExtension() override;
|
||||||
void DumpImage(std::ostream& stream, const Texture* texture) override;
|
void DumpImage(std::ostream& stream, const Texture* texture) override;
|
||||||
};
|
};
|
||||||
} // namespace iwi6
|
} // namespace image::iwi6
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
|
|
||||||
using namespace iwi8;
|
using namespace image::iwi8;
|
||||||
|
|
||||||
IwiWriter::IwiWriter() = default;
|
IwiWriter::IwiWriter() = default;
|
||||||
|
|
||||||
@@ -40,13 +40,13 @@ IwiFormat IwiWriter::GetIwiFormatForImageFormat(const ImageFormat* imageFormat)
|
|||||||
|
|
||||||
void IwiWriter::WriteVersion(std::ostream& stream)
|
void IwiWriter::WriteVersion(std::ostream& stream)
|
||||||
{
|
{
|
||||||
IwiVersion version{};
|
IwiVersionHeader version{};
|
||||||
version.tag[0] = 'I';
|
version.tag[0] = 'I';
|
||||||
version.tag[1] = 'W';
|
version.tag[1] = 'W';
|
||||||
version.tag[2] = 'i';
|
version.tag[2] = 'i';
|
||||||
version.version = 8;
|
version.version = 8;
|
||||||
|
|
||||||
stream.write(reinterpret_cast<char*>(&version), sizeof(IwiVersion));
|
stream.write(reinterpret_cast<char*>(&version), sizeof(IwiVersionHeader));
|
||||||
}
|
}
|
||||||
|
|
||||||
void IwiWriter::FillHeader2D(IwiHeader& header, const Texture2D& texture)
|
void IwiWriter::FillHeader2D(IwiHeader& header, const Texture2D& texture)
|
||||||
@@ -96,7 +96,7 @@ void IwiWriter::DumpImage(std::ostream& stream, const Texture* texture)
|
|||||||
if (!texture->HasMipMaps())
|
if (!texture->HasMipMaps())
|
||||||
header.flags |= IMG_FLAG_NOMIPMAPS;
|
header.flags |= IMG_FLAG_NOMIPMAPS;
|
||||||
|
|
||||||
auto currentFileSize = sizeof(IwiVersion) + sizeof(IwiHeader);
|
auto currentFileSize = sizeof(IwiVersionHeader) + sizeof(IwiHeader);
|
||||||
|
|
||||||
const auto textureMipCount = texture->HasMipMaps() ? texture->GetMipMapCount() : 1;
|
const auto textureMipCount = texture->HasMipMaps() ? texture->GetMipMapCount() : 1;
|
||||||
for (auto currentMipLevel = textureMipCount - 1; currentMipLevel >= 0; currentMipLevel--)
|
for (auto currentMipLevel = textureMipCount - 1; currentMipLevel >= 0; currentMipLevel--)
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "IImageWriter.h"
|
|
||||||
#include "Image/IwiTypes.h"
|
#include "Image/IwiTypes.h"
|
||||||
|
#include "ImageWriter.h"
|
||||||
|
|
||||||
namespace iwi8
|
namespace image::iwi8
|
||||||
{
|
{
|
||||||
class IwiWriter final : public IImageWriter
|
class IwiWriter final : public ImageWriter
|
||||||
{
|
{
|
||||||
static IwiFormat GetIwiFormatForImageFormat(const ImageFormat* imageFormat);
|
static IwiFormat GetIwiFormatForImageFormat(const ImageFormat* imageFormat);
|
||||||
|
|
||||||
@@ -27,4 +27,4 @@ namespace iwi8
|
|||||||
std::string GetFileExtension() override;
|
std::string GetFileExtension() override;
|
||||||
void DumpImage(std::ostream& stream, const Texture* texture) override;
|
void DumpImage(std::ostream& stream, const Texture* texture) override;
|
||||||
};
|
};
|
||||||
} // namespace iwi8
|
} // namespace image::iwi8
|
||||||
|
|||||||
@@ -4,6 +4,8 @@
|
|||||||
#include <cassert>
|
#include <cassert>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
|
||||||
|
namespace image
|
||||||
|
{
|
||||||
// ==============================================
|
// ==============================================
|
||||||
// ================= Texture ====================
|
// ================= Texture ====================
|
||||||
// ==============================================
|
// ==============================================
|
||||||
@@ -441,3 +443,4 @@ const uint8_t* Texture3D::GetBufferForMipLevel(const int mipLevel, const int fac
|
|||||||
|
|
||||||
return &m_data[bufferOffset];
|
return &m_data[bufferOffset];
|
||||||
}
|
}
|
||||||
|
} // namespace image
|
||||||
|
|||||||
@@ -3,6 +3,8 @@
|
|||||||
|
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
|
|
||||||
|
namespace image
|
||||||
|
{
|
||||||
enum class TextureType : std::uint8_t
|
enum class TextureType : std::uint8_t
|
||||||
{
|
{
|
||||||
T_2D,
|
T_2D,
|
||||||
@@ -130,3 +132,4 @@ public:
|
|||||||
|
|
||||||
[[nodiscard]] int GetMipMapCount() const override;
|
[[nodiscard]] int GetMipMapCount() const override;
|
||||||
};
|
};
|
||||||
|
} // namespace image
|
||||||
|
|||||||
@@ -2,6 +2,8 @@
|
|||||||
|
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
|
|
||||||
|
namespace image
|
||||||
|
{
|
||||||
constexpr uint64_t TextureConverter::Mask1(const unsigned length)
|
constexpr uint64_t TextureConverter::Mask1(const unsigned length)
|
||||||
{
|
{
|
||||||
if (length >= sizeof(uint64_t) * 8)
|
if (length >= sizeof(uint64_t) * 8)
|
||||||
@@ -192,8 +194,8 @@ void TextureConverter::ConvertUnsignedToUnsigned()
|
|||||||
|
|
||||||
SetPixelFunctions(inputFormat->m_bits_per_pixel, outputFormat->m_bits_per_pixel);
|
SetPixelFunctions(inputFormat->m_bits_per_pixel, outputFormat->m_bits_per_pixel);
|
||||||
|
|
||||||
if (inputFormat->m_r_size == outputFormat->m_r_size && inputFormat->m_g_size == outputFormat->m_g_size && inputFormat->m_b_size == outputFormat->m_b_size
|
if (inputFormat->m_r_size == outputFormat->m_r_size && inputFormat->m_g_size == outputFormat->m_g_size
|
||||||
&& inputFormat->m_a_size == outputFormat->m_a_size)
|
&& inputFormat->m_b_size == outputFormat->m_b_size && inputFormat->m_a_size == outputFormat->m_a_size)
|
||||||
{
|
{
|
||||||
ReorderUnsignedToUnsigned();
|
ReorderUnsignedToUnsigned();
|
||||||
}
|
}
|
||||||
@@ -220,3 +222,4 @@ std::unique_ptr<Texture> TextureConverter::Convert()
|
|||||||
|
|
||||||
return std::move(m_output_texture);
|
return std::move(m_output_texture);
|
||||||
}
|
}
|
||||||
|
} // namespace image
|
||||||
|
|||||||
@@ -5,6 +5,8 @@
|
|||||||
#include <functional>
|
#include <functional>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
|
namespace image
|
||||||
|
{
|
||||||
class TextureConverter
|
class TextureConverter
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -29,3 +31,4 @@ private:
|
|||||||
const ImageFormat* m_input_format;
|
const ImageFormat* m_input_format;
|
||||||
const ImageFormat* m_output_format;
|
const ImageFormat* m_output_format;
|
||||||
};
|
};
|
||||||
|
} // namespace image
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
using namespace IW3;
|
using namespace IW3;
|
||||||
|
using namespace image;
|
||||||
|
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
@@ -38,7 +39,7 @@ namespace
|
|||||||
if (!file.IsOpen())
|
if (!file.IsOpen())
|
||||||
return AssetCreationResult::NoAction();
|
return AssetCreationResult::NoAction();
|
||||||
|
|
||||||
const auto texture = dds::LoadDds(*file.m_stream);
|
const auto texture = image::LoadDds(*file.m_stream);
|
||||||
if (!texture)
|
if (!texture)
|
||||||
{
|
{
|
||||||
con::error("Failed to load dds file for image asset \"{}\"", assetName);
|
con::error("Failed to load dds file for image asset \"{}\"", assetName);
|
||||||
@@ -91,11 +92,11 @@ namespace
|
|||||||
loadDef->levelCount = static_cast<char>(mipCount);
|
loadDef->levelCount = static_cast<char>(mipCount);
|
||||||
loadDef->flags = 0;
|
loadDef->flags = 0;
|
||||||
if (!texture->HasMipMaps())
|
if (!texture->HasMipMaps())
|
||||||
loadDef->flags |= iwi6::IMG_FLAG_NOMIPMAPS;
|
loadDef->flags |= image::iwi6::IMG_FLAG_NOMIPMAPS;
|
||||||
if (texture->GetTextureType() == TextureType::T_CUBE)
|
if (texture->GetTextureType() == TextureType::T_CUBE)
|
||||||
loadDef->flags |= iwi6::IMG_FLAG_CUBEMAP;
|
loadDef->flags |= image::iwi6::IMG_FLAG_CUBEMAP;
|
||||||
if (texture->GetTextureType() == TextureType::T_3D)
|
if (texture->GetTextureType() == TextureType::T_3D)
|
||||||
loadDef->flags |= iwi6::IMG_FLAG_VOLMAP;
|
loadDef->flags |= image::iwi6::IMG_FLAG_VOLMAP;
|
||||||
loadDef->dimensions[0] = image->width;
|
loadDef->dimensions[0] = image->width;
|
||||||
loadDef->dimensions[1] = image->height;
|
loadDef->dimensions[1] = image->height;
|
||||||
loadDef->dimensions[2] = image->depth;
|
loadDef->dimensions[2] = image->depth;
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ namespace
|
|||||||
file.m_stream->read(fileData.get(), fileSize);
|
file.m_stream->read(fileData.get(), fileSize);
|
||||||
|
|
||||||
std::istringstream ss(std::string(fileData.get(), fileSize));
|
std::istringstream ss(std::string(fileData.get(), fileSize));
|
||||||
const auto texture = iwi::LoadIwi(ss);
|
const auto texture = image::LoadIwi(ss);
|
||||||
if (!texture)
|
if (!texture)
|
||||||
{
|
{
|
||||||
con::error("Failed to load texture from: {}", fileName);
|
con::error("Failed to load texture from: {}", fileName);
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ namespace
|
|||||||
const auto dataHash = static_cast<unsigned>(crc32(0u, reinterpret_cast<const Bytef*>(fileData.get()), static_cast<unsigned>(fileSize)));
|
const auto dataHash = static_cast<unsigned>(crc32(0u, reinterpret_cast<const Bytef*>(fileData.get()), static_cast<unsigned>(fileSize)));
|
||||||
|
|
||||||
std::istringstream ss(std::string(fileData.get(), fileSize));
|
std::istringstream ss(std::string(fileData.get(), fileSize));
|
||||||
const auto texture = iwi::LoadIwi(ss);
|
const auto texture = image::LoadIwi(ss);
|
||||||
if (!texture)
|
if (!texture)
|
||||||
{
|
{
|
||||||
con::error("Failed to load texture from: {}", fileName);
|
con::error("Failed to load texture from: {}", fileName);
|
||||||
|
|||||||
15
src/ObjLoading/Image/ImageLoaderCommon.cpp
Normal file
15
src/ObjLoading/Image/ImageLoaderCommon.cpp
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
#include "ImageLoaderCommon.h"
|
||||||
|
|
||||||
|
namespace image
|
||||||
|
{
|
||||||
|
std::optional<AssetCreationResult> CommonImageLoaderResult::GetResultIfCancelled() const
|
||||||
|
{
|
||||||
|
if (m_failure)
|
||||||
|
return AssetCreationResult::Failure();
|
||||||
|
|
||||||
|
if (!m_texture)
|
||||||
|
return AssetCreationResult::NoAction();
|
||||||
|
|
||||||
|
return std::nullopt;
|
||||||
|
}
|
||||||
|
} // namespace image
|
||||||
23
src/ObjLoading/Image/ImageLoaderCommon.h
Normal file
23
src/ObjLoading/Image/ImageLoaderCommon.h
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "Asset/AssetCreationResult.h"
|
||||||
|
#include "Image/IwiTypes.h"
|
||||||
|
#include "Image/Texture.h"
|
||||||
|
|
||||||
|
#include <memory>
|
||||||
|
#include <optional>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
namespace image
|
||||||
|
{
|
||||||
|
struct CommonImageLoaderResult
|
||||||
|
{
|
||||||
|
std::optional<AssetCreationResult> GetResultIfCancelled() const;
|
||||||
|
|
||||||
|
bool m_failure;
|
||||||
|
std::string m_iwi_path;
|
||||||
|
std::unique_ptr<Texture> m_texture;
|
||||||
|
};
|
||||||
|
|
||||||
|
CommonImageLoaderResult LoadImageCommon();
|
||||||
|
} // namespace image
|
||||||
@@ -16,6 +16,7 @@
|
|||||||
#include <format>
|
#include <format>
|
||||||
|
|
||||||
using namespace IW3;
|
using namespace IW3;
|
||||||
|
using namespace image;
|
||||||
|
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
@@ -26,15 +27,15 @@ namespace
|
|||||||
const auto& loadDef = *image.texture.loadDef;
|
const auto& loadDef = *image.texture.loadDef;
|
||||||
textureLoader.Width(loadDef.dimensions[0]).Height(loadDef.dimensions[1]).Depth(loadDef.dimensions[2]);
|
textureLoader.Width(loadDef.dimensions[0]).Height(loadDef.dimensions[1]).Depth(loadDef.dimensions[2]);
|
||||||
|
|
||||||
if (loadDef.flags & iwi6::IMG_FLAG_VOLMAP)
|
if (loadDef.flags & image::iwi6::IMG_FLAG_VOLMAP)
|
||||||
textureLoader.Type(TextureType::T_3D);
|
textureLoader.Type(TextureType::T_3D);
|
||||||
else if (loadDef.flags & iwi6::IMG_FLAG_CUBEMAP)
|
else if (loadDef.flags & image::iwi6::IMG_FLAG_CUBEMAP)
|
||||||
textureLoader.Type(TextureType::T_CUBE);
|
textureLoader.Type(TextureType::T_CUBE);
|
||||||
else
|
else
|
||||||
textureLoader.Type(TextureType::T_2D);
|
textureLoader.Type(TextureType::T_2D);
|
||||||
|
|
||||||
textureLoader.Format(static_cast<oat::D3DFORMAT>(loadDef.format));
|
textureLoader.Format(static_cast<oat::D3DFORMAT>(loadDef.format));
|
||||||
textureLoader.HasMipMaps(!(loadDef.flags & iwi6::IMG_FLAG_NOMIPMAPS));
|
textureLoader.HasMipMaps(!(loadDef.flags & image::iwi6::IMG_FLAG_NOMIPMAPS));
|
||||||
return textureLoader.LoadTexture(loadDef.data);
|
return textureLoader.LoadTexture(loadDef.data);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -48,7 +49,7 @@ namespace
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
return iwi::LoadIwi(*filePathImage.m_stream);
|
return image::LoadIwi(*filePathImage.m_stream);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<Texture> LoadImageData(ISearchPath& searchPath, const GfxImage& image)
|
std::unique_ptr<Texture> LoadImageData(ISearchPath& searchPath, const GfxImage& image)
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
#include "Dumping/AbstractAssetDumper.h"
|
#include "Dumping/AbstractAssetDumper.h"
|
||||||
#include "Game/IW3/IW3.h"
|
#include "Game/IW3/IW3.h"
|
||||||
#include "Image/IImageWriter.h"
|
#include "Image/ImageWriter.h"
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
@@ -17,6 +17,6 @@ namespace image
|
|||||||
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<IW3::AssetImage::Type>& asset) override;
|
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<IW3::AssetImage::Type>& asset) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::unique_ptr<IImageWriter> m_writer;
|
std::unique_ptr<ImageWriter> m_writer;
|
||||||
};
|
};
|
||||||
} // namespace image
|
} // namespace image
|
||||||
|
|||||||
@@ -13,6 +13,7 @@
|
|||||||
#include <format>
|
#include <format>
|
||||||
|
|
||||||
using namespace IW4;
|
using namespace IW4;
|
||||||
|
using namespace image;
|
||||||
|
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
@@ -23,15 +24,15 @@ namespace
|
|||||||
const auto& loadDef = *image.texture.loadDef;
|
const auto& loadDef = *image.texture.loadDef;
|
||||||
textureLoader.Width(image.width).Height(image.height).Depth(image.depth);
|
textureLoader.Width(image.width).Height(image.height).Depth(image.depth);
|
||||||
|
|
||||||
if ((loadDef.flags & iwi8::IMG_FLAG_MAPTYPE_MASK) == iwi8::IMG_FLAG_MAPTYPE_3D)
|
if ((loadDef.flags & image::iwi8::IMG_FLAG_MAPTYPE_MASK) == image::iwi8::IMG_FLAG_MAPTYPE_3D)
|
||||||
textureLoader.Type(TextureType::T_3D);
|
textureLoader.Type(TextureType::T_3D);
|
||||||
else if ((loadDef.flags & iwi8::IMG_FLAG_MAPTYPE_MASK) == iwi8::IMG_FLAG_MAPTYPE_CUBE)
|
else if ((loadDef.flags & image::iwi8::IMG_FLAG_MAPTYPE_MASK) == image::iwi8::IMG_FLAG_MAPTYPE_CUBE)
|
||||||
textureLoader.Type(TextureType::T_CUBE);
|
textureLoader.Type(TextureType::T_CUBE);
|
||||||
else
|
else
|
||||||
textureLoader.Type(TextureType::T_2D);
|
textureLoader.Type(TextureType::T_2D);
|
||||||
|
|
||||||
textureLoader.Format(static_cast<oat::D3DFORMAT>(loadDef.format));
|
textureLoader.Format(static_cast<oat::D3DFORMAT>(loadDef.format));
|
||||||
textureLoader.HasMipMaps(!(loadDef.flags & iwi8::IMG_FLAG_NOMIPMAPS));
|
textureLoader.HasMipMaps(!(loadDef.flags & image::iwi8::IMG_FLAG_NOMIPMAPS));
|
||||||
return textureLoader.LoadTexture(loadDef.data);
|
return textureLoader.LoadTexture(loadDef.data);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -45,7 +46,7 @@ namespace
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
return iwi::LoadIwi(*filePathImage.m_stream);
|
return image::LoadIwi(*filePathImage.m_stream);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<Texture> LoadImageData(ISearchPath& searchPath, const GfxImage& image)
|
std::unique_ptr<Texture> LoadImageData(ISearchPath& searchPath, const GfxImage& image)
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
#include "Dumping/AbstractAssetDumper.h"
|
#include "Dumping/AbstractAssetDumper.h"
|
||||||
#include "Game/IW4/IW4.h"
|
#include "Game/IW4/IW4.h"
|
||||||
#include "Image/IImageWriter.h"
|
#include "Image/ImageWriter.h"
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
@@ -17,6 +17,6 @@ namespace image
|
|||||||
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<IW4::AssetImage::Type>& asset) override;
|
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<IW4::AssetImage::Type>& asset) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::unique_ptr<IImageWriter> m_writer;
|
std::unique_ptr<ImageWriter> m_writer;
|
||||||
};
|
};
|
||||||
} // namespace image
|
} // namespace image
|
||||||
|
|||||||
@@ -13,6 +13,7 @@
|
|||||||
#include <format>
|
#include <format>
|
||||||
|
|
||||||
using namespace IW5;
|
using namespace IW5;
|
||||||
|
using namespace image;
|
||||||
|
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
@@ -24,15 +25,15 @@ namespace
|
|||||||
|
|
||||||
textureLoader.Width(image.width).Height(image.height).Depth(image.depth);
|
textureLoader.Width(image.width).Height(image.height).Depth(image.depth);
|
||||||
|
|
||||||
if ((loadDef.flags & iwi8::IMG_FLAG_MAPTYPE_MASK) == iwi8::IMG_FLAG_MAPTYPE_3D)
|
if ((loadDef.flags & image::iwi8::IMG_FLAG_MAPTYPE_MASK) == image::iwi8::IMG_FLAG_MAPTYPE_3D)
|
||||||
textureLoader.Type(TextureType::T_3D);
|
textureLoader.Type(TextureType::T_3D);
|
||||||
else if ((loadDef.flags & iwi8::IMG_FLAG_MAPTYPE_MASK) == iwi8::IMG_FLAG_MAPTYPE_CUBE)
|
else if ((loadDef.flags & image::iwi8::IMG_FLAG_MAPTYPE_MASK) == image::iwi8::IMG_FLAG_MAPTYPE_CUBE)
|
||||||
textureLoader.Type(TextureType::T_CUBE);
|
textureLoader.Type(TextureType::T_CUBE);
|
||||||
else
|
else
|
||||||
textureLoader.Type(TextureType::T_2D);
|
textureLoader.Type(TextureType::T_2D);
|
||||||
|
|
||||||
textureLoader.Format(static_cast<oat::D3DFORMAT>(loadDef.format));
|
textureLoader.Format(static_cast<oat::D3DFORMAT>(loadDef.format));
|
||||||
textureLoader.HasMipMaps(!(loadDef.flags & iwi8::IMG_FLAG_NOMIPMAPS));
|
textureLoader.HasMipMaps(!(loadDef.flags & image::iwi8::IMG_FLAG_NOMIPMAPS));
|
||||||
return textureLoader.LoadTexture(loadDef.data);
|
return textureLoader.LoadTexture(loadDef.data);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -46,7 +47,7 @@ namespace
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
return iwi::LoadIwi(*filePathImage.m_stream);
|
return image::LoadIwi(*filePathImage.m_stream);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<Texture> LoadImageData(ISearchPath& searchPath, const GfxImage& image)
|
std::unique_ptr<Texture> LoadImageData(ISearchPath& searchPath, const GfxImage& image)
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
#include "Dumping/AbstractAssetDumper.h"
|
#include "Dumping/AbstractAssetDumper.h"
|
||||||
#include "Game/IW5/IW5.h"
|
#include "Game/IW5/IW5.h"
|
||||||
#include "Image/IImageWriter.h"
|
#include "Image/ImageWriter.h"
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
@@ -17,6 +17,6 @@ namespace image
|
|||||||
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<IW5::AssetImage::Type>& asset) override;
|
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<IW5::AssetImage::Type>& asset) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::unique_ptr<IImageWriter> m_writer;
|
std::unique_ptr<ImageWriter> m_writer;
|
||||||
};
|
};
|
||||||
} // namespace image
|
} // namespace image
|
||||||
|
|||||||
@@ -13,6 +13,7 @@
|
|||||||
#include <format>
|
#include <format>
|
||||||
|
|
||||||
using namespace T5;
|
using namespace T5;
|
||||||
|
using namespace image;
|
||||||
|
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
@@ -23,15 +24,15 @@ namespace
|
|||||||
const auto& loadDef = *image.texture.loadDef;
|
const auto& loadDef = *image.texture.loadDef;
|
||||||
textureLoader.Width(image.width).Height(image.height).Depth(image.depth);
|
textureLoader.Width(image.width).Height(image.height).Depth(image.depth);
|
||||||
|
|
||||||
if (loadDef.flags & iwi13::IMG_FLAG_VOLMAP)
|
if (loadDef.flags & image::iwi13::IMG_FLAG_VOLMAP)
|
||||||
textureLoader.Type(TextureType::T_3D);
|
textureLoader.Type(TextureType::T_3D);
|
||||||
else if (loadDef.flags & iwi13::IMG_FLAG_CUBEMAP)
|
else if (loadDef.flags & image::iwi13::IMG_FLAG_CUBEMAP)
|
||||||
textureLoader.Type(TextureType::T_CUBE);
|
textureLoader.Type(TextureType::T_CUBE);
|
||||||
else
|
else
|
||||||
textureLoader.Type(TextureType::T_2D);
|
textureLoader.Type(TextureType::T_2D);
|
||||||
|
|
||||||
textureLoader.Format(static_cast<oat::D3DFORMAT>(loadDef.format));
|
textureLoader.Format(static_cast<oat::D3DFORMAT>(loadDef.format));
|
||||||
textureLoader.HasMipMaps(!(loadDef.flags & iwi13::IMG_FLAG_NOMIPMAPS));
|
textureLoader.HasMipMaps(!(loadDef.flags & image::iwi13::IMG_FLAG_NOMIPMAPS));
|
||||||
return textureLoader.LoadTexture(loadDef.data);
|
return textureLoader.LoadTexture(loadDef.data);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -45,7 +46,7 @@ namespace
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
return iwi::LoadIwi(*filePathImage.m_stream);
|
return image::LoadIwi(*filePathImage.m_stream);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<Texture> LoadImageData(ISearchPath& searchPath, const GfxImage& image)
|
std::unique_ptr<Texture> LoadImageData(ISearchPath& searchPath, const GfxImage& image)
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
#include "Dumping/AbstractAssetDumper.h"
|
#include "Dumping/AbstractAssetDumper.h"
|
||||||
#include "Game/T5/T5.h"
|
#include "Game/T5/T5.h"
|
||||||
#include "Image/IImageWriter.h"
|
#include "Image/ImageWriter.h"
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
@@ -17,6 +17,6 @@ namespace image
|
|||||||
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<T5::AssetImage::Type>& asset) override;
|
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<T5::AssetImage::Type>& asset) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::unique_ptr<IImageWriter> m_writer;
|
std::unique_ptr<ImageWriter> m_writer;
|
||||||
};
|
};
|
||||||
} // namespace image
|
} // namespace image
|
||||||
|
|||||||
@@ -14,6 +14,7 @@
|
|||||||
#include <format>
|
#include <format>
|
||||||
|
|
||||||
using namespace T6;
|
using namespace T6;
|
||||||
|
using namespace image;
|
||||||
|
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
@@ -24,15 +25,15 @@ namespace
|
|||||||
const auto& loadDef = *image.texture.loadDef;
|
const auto& loadDef = *image.texture.loadDef;
|
||||||
textureLoader.Width(image.width).Height(image.height).Depth(image.depth);
|
textureLoader.Width(image.width).Height(image.height).Depth(image.depth);
|
||||||
|
|
||||||
if (loadDef.flags & iwi27::IMG_FLAG_VOLMAP)
|
if (loadDef.flags & image::iwi27::IMG_FLAG_VOLMAP)
|
||||||
textureLoader.Type(TextureType::T_3D);
|
textureLoader.Type(TextureType::T_3D);
|
||||||
else if (loadDef.flags & iwi27::IMG_FLAG_CUBEMAP)
|
else if (loadDef.flags & image::iwi27::IMG_FLAG_CUBEMAP)
|
||||||
textureLoader.Type(TextureType::T_CUBE);
|
textureLoader.Type(TextureType::T_CUBE);
|
||||||
else
|
else
|
||||||
textureLoader.Type(TextureType::T_2D);
|
textureLoader.Type(TextureType::T_2D);
|
||||||
|
|
||||||
textureLoader.Format(static_cast<oat::DXGI_FORMAT>(loadDef.format));
|
textureLoader.Format(static_cast<oat::DXGI_FORMAT>(loadDef.format));
|
||||||
textureLoader.HasMipMaps(!(loadDef.flags & iwi27::IMG_FLAG_NOMIPMAPS));
|
textureLoader.HasMipMaps(!(loadDef.flags & image::iwi27::IMG_FLAG_NOMIPMAPS));
|
||||||
return textureLoader.LoadTexture(loadDef.data);
|
return textureLoader.LoadTexture(loadDef.data);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -46,7 +47,7 @@ namespace
|
|||||||
|
|
||||||
if (ipakStream)
|
if (ipakStream)
|
||||||
{
|
{
|
||||||
auto loadedTexture = iwi::LoadIwi(*ipakStream);
|
auto loadedTexture = image::LoadIwi(*ipakStream);
|
||||||
ipakStream->close();
|
ipakStream->close();
|
||||||
|
|
||||||
if (loadedTexture != nullptr)
|
if (loadedTexture != nullptr)
|
||||||
@@ -63,7 +64,7 @@ namespace
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
return iwi::LoadIwi(*filePathImage.m_stream);
|
return image::LoadIwi(*filePathImage.m_stream);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<Texture> LoadImageData(ISearchPath& searchPath, const GfxImage& image)
|
std::unique_ptr<Texture> LoadImageData(ISearchPath& searchPath, const GfxImage& image)
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
#include "Dumping/AbstractAssetDumper.h"
|
#include "Dumping/AbstractAssetDumper.h"
|
||||||
#include "Game/T6/T6.h"
|
#include "Game/T6/T6.h"
|
||||||
#include "Image/IImageWriter.h"
|
#include "Image/ImageWriter.h"
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
@@ -17,6 +17,6 @@ namespace image
|
|||||||
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<T6::AssetImage::Type>& asset) override;
|
void DumpAsset(AssetDumpingContext& context, const XAssetInfo<T6::AssetImage::Type>& asset) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::unique_ptr<IImageWriter> m_writer;
|
std::unique_ptr<ImageWriter> m_writer;
|
||||||
};
|
};
|
||||||
} // namespace image
|
} // namespace image
|
||||||
|
|||||||
Reference in New Issue
Block a user