Generate IWI instead of PGM
Also remove PGM loading code
This commit is contained in:
parent
ecc21b4ac2
commit
3785322171
@ -101,7 +101,6 @@ namespace Components
|
|||||||
Loader::Register(new StructuredData());
|
Loader::Register(new StructuredData());
|
||||||
Loader::Register(new ConnectProtocol());
|
Loader::Register(new ConnectProtocol());
|
||||||
Loader::Register(new StartupMessages());
|
Loader::Register(new StartupMessages());
|
||||||
Loader::Register(new Images());
|
|
||||||
|
|
||||||
Loader::Register(new Client());
|
Loader::Register(new Client());
|
||||||
|
|
||||||
|
@ -130,6 +130,5 @@ namespace Components
|
|||||||
#include "Modules/ConnectProtocol.hpp"
|
#include "Modules/ConnectProtocol.hpp"
|
||||||
#include "Modules/StartupMessages.hpp"
|
#include "Modules/StartupMessages.hpp"
|
||||||
#include "Modules/Stats.hpp"
|
#include "Modules/Stats.hpp"
|
||||||
#include "Modules/Images.hpp"
|
|
||||||
|
|
||||||
#include "Modules/Client.hpp"
|
#include "Modules/Client.hpp"
|
@ -202,14 +202,43 @@ namespace Assets
|
|||||||
|
|
||||||
// Save generated image
|
// Save generated image
|
||||||
Utils::IO::CreateDir("userraw\\images");
|
Utils::IO::CreateDir("userraw\\images");
|
||||||
std::string buf = Utils::String::VA("P5\n%d\n%d\n255\n", w, h);
|
|
||||||
|
|
||||||
int headerSize = buf.size();
|
int fileSize = w * h * 4;
|
||||||
|
int iwiHeaderSize = static_cast<int>(sizeof(Game::GfxImageFileHeader));
|
||||||
|
|
||||||
buf.resize(headerSize + w * h);
|
Game::GfxImageFileHeader iwiHeader =
|
||||||
std::memcpy(buf.data() + headerSize, pixels, w * h);
|
{
|
||||||
|
{ 'I', 'W', 'i' },
|
||||||
|
/* version */
|
||||||
|
8,
|
||||||
|
/* flags */
|
||||||
|
2,
|
||||||
|
/* format */
|
||||||
|
Game::IMG_FORMAT_BITMAP_RGBA,
|
||||||
|
0,
|
||||||
|
/* dimensions(x, y, z) */
|
||||||
|
{ static_cast<short>(w), static_cast<short>(h), 1 },
|
||||||
|
/* fileSizeForPicmip (mipSize in bytes + sizeof(GfxImageFileHeader)) */
|
||||||
|
{ fileSize + iwiHeaderSize, fileSize, fileSize, fileSize }
|
||||||
|
};
|
||||||
|
|
||||||
Utils::IO::WriteFile(Utils::String::VA("userraw\\images\\%s.pgm", texName), buf);
|
std::string outIwi;
|
||||||
|
outIwi.resize(fileSize + sizeof(Game::GfxImageFileHeader));
|
||||||
|
|
||||||
|
std::memcpy(outIwi.data(), &iwiHeader, sizeof(Game::GfxImageFileHeader));
|
||||||
|
|
||||||
|
// Generate RGBA data
|
||||||
|
auto* rgbaPixels = outIwi.data() + sizeof(Game::GfxImageFileHeader);
|
||||||
|
|
||||||
|
for (int i = 0; i < w * h * 4; i += 4)
|
||||||
|
{
|
||||||
|
rgbaPixels[i + 0] = static_cast<char>(255);
|
||||||
|
rgbaPixels[i + 1] = static_cast<char>(255);
|
||||||
|
rgbaPixels[i + 2] = static_cast<char>(255);
|
||||||
|
rgbaPixels[i + 3] = static_cast<char>(pixels[i / 4]);
|
||||||
|
}
|
||||||
|
|
||||||
|
Utils::IO::WriteFile(Utils::String::VA("userraw\\images\\%s.iwi", texName), outIwi);
|
||||||
Utils::Memory::Free(pixels);
|
Utils::Memory::Free(pixels);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,95 +0,0 @@
|
|||||||
#include "STDInclude.hpp"
|
|
||||||
|
|
||||||
namespace Components
|
|
||||||
{
|
|
||||||
bool Image_LoadFontTextureFromPgm(Game::GfxImage* image)
|
|
||||||
{
|
|
||||||
auto pgmName = Utils::String::VA("images/%s.pgm", image->name);
|
|
||||||
|
|
||||||
if (!Game::FS_FileExists(pgmName))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
auto pgmFile = FileSystem::File(pgmName);
|
|
||||||
|
|
||||||
// Build a header
|
|
||||||
Game::GfxImageFileHeader header =
|
|
||||||
{
|
|
||||||
{ 'I', 'W', 'i' },
|
|
||||||
/* version */
|
|
||||||
8,
|
|
||||||
/* flags */
|
|
||||||
2,
|
|
||||||
/* format */
|
|
||||||
Game::IMG_FORMAT_BITMAP_RGBA,
|
|
||||||
0,
|
|
||||||
/* dimensions(x, y, z) */
|
|
||||||
{ 0, 0, 1 },
|
|
||||||
/* fileSizeForPicmip (mipSize in bytes + sizeof(GfxImageFileHeader)) */
|
|
||||||
{ 0, 0, 0, 0 }
|
|
||||||
};
|
|
||||||
|
|
||||||
int w, h;
|
|
||||||
|
|
||||||
auto* buffer = pgmFile.getBuffer().data();
|
|
||||||
|
|
||||||
if (sscanf_s(buffer, "P5\n%d\n%d\n255\n", &w, &h) != 2)
|
|
||||||
{
|
|
||||||
Logger::SoftError("Image_LoadFontTextureFromPgm: Pgm %s is broken!\n", pgmFile.getName().data());
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
int newLineCounter = 0;
|
|
||||||
|
|
||||||
while (newLineCounter < 4)
|
|
||||||
newLineCounter += *(buffer++) == '\n' ? 1 : 0;
|
|
||||||
|
|
||||||
auto* pixels = Utils::Memory::AllocateArray<uint8_t>(w * h * 4);
|
|
||||||
|
|
||||||
// Our font texture contains alpha channel only
|
|
||||||
for (int i = 0; i < w * h * 4; i += 4)
|
|
||||||
{
|
|
||||||
pixels[i + 0] = 255;
|
|
||||||
pixels[i + 1] = 255;
|
|
||||||
pixels[i + 2] = 255;
|
|
||||||
pixels[i + 3] = buffer[i / 4];
|
|
||||||
}
|
|
||||||
|
|
||||||
header.dimensions[0] = static_cast<short>(w);
|
|
||||||
header.dimensions[1] = static_cast<short>(h);
|
|
||||||
|
|
||||||
auto fileSize = w * h * 4;
|
|
||||||
|
|
||||||
for (int i = 0; i < 4; ++i)
|
|
||||||
header.fileSizeForPicmip[i] = fileSize;
|
|
||||||
|
|
||||||
header.fileSizeForPicmip[0] += sizeof(Game::GfxImageFileHeader);
|
|
||||||
|
|
||||||
image->noPicmip = 0;
|
|
||||||
image->width = header.dimensions[0];
|
|
||||||
image->height = header.dimensions[1];
|
|
||||||
image->depth = 1;
|
|
||||||
|
|
||||||
Game::Image_PicmipForSemantic(image->semantic, &image->picmip);
|
|
||||||
Game::Image_LoadFromData(image, &header, pixels);
|
|
||||||
|
|
||||||
Utils::Memory::Free(pixels);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool Image_LoadFromFileWithReader_stub(Game::GfxImage* image, Game::Reader_t reader)
|
|
||||||
{
|
|
||||||
if (Utils::String::StartsWith(image->name, "if_") && Image_LoadFontTextureFromPgm(image))
|
|
||||||
return true;
|
|
||||||
|
|
||||||
return Game::Image_LoadFromFileWithReader(image, reader);
|
|
||||||
}
|
|
||||||
|
|
||||||
Images::Images()
|
|
||||||
{
|
|
||||||
Utils::Hook(0x51F486, Image_LoadFromFileWithReader_stub, HOOK_CALL).install()->quick();
|
|
||||||
Utils::Hook(0x51F595, Image_LoadFromFileWithReader_stub, HOOK_CALL).install()->quick();
|
|
||||||
Utils::Hook(0x51F809, Image_LoadFromFileWithReader_stub, HOOK_CALL).install()->quick();
|
|
||||||
Utils::Hook(0x51F896, Image_LoadFromFileWithReader_stub, HOOK_CALL).install()->quick();
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,10 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
namespace Components
|
|
||||||
{
|
|
||||||
class Images : public Component
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
Images();
|
|
||||||
};
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user