mirror of
https://github.com/izzy2lost/Torch.git
synced 2026-07-06 00:18:35 -07:00
Added ia1 conversion
This commit is contained in:
@@ -8,12 +8,36 @@ namespace fs = std::filesystem;
|
||||
static const std::unordered_map <std::string, TextureType> gTextureTypes = {
|
||||
{ "RGBA16", TextureType::RGBA16bpp },
|
||||
{ "RGBA32", TextureType::RGBA32bpp },
|
||||
{ "IA1", TextureType::GrayscaleAlpha4bpp },
|
||||
{ "IA1", TextureType::GrayscaleAlpha1bpp },
|
||||
{ "IA4", TextureType::GrayscaleAlpha4bpp },
|
||||
{ "IA8", TextureType::GrayscaleAlpha8bpp },
|
||||
{ "IA16", TextureType::GrayscaleAlpha16bpp },
|
||||
};
|
||||
|
||||
uint8_t* alloc_ia8_text_from_i1(uint16_t *in, int16_t width, int16_t height) {
|
||||
int32_t inPos;
|
||||
uint16_t bitMask;
|
||||
int16_t outPos = 0;
|
||||
uint8_t* out = new uint8_t[width * height];
|
||||
|
||||
for (inPos = 0; inPos < (width * height) / 16; inPos++) {
|
||||
bitMask = 0x8000;
|
||||
|
||||
while (bitMask != 0) {
|
||||
if (BSWAP16(in[inPos]) & bitMask) {
|
||||
out[outPos] = 0xFF;
|
||||
} else {
|
||||
out[outPos] = 0x00;
|
||||
}
|
||||
|
||||
bitMask /= 2;
|
||||
outPos++;
|
||||
}
|
||||
}
|
||||
|
||||
return out;
|
||||
}
|
||||
|
||||
bool TextureFactory::process(LUS::BinaryWriter* writer, YAML::Node& data, std::vector<uint8_t>& buffer) {
|
||||
|
||||
auto format = data["format"].as<std::string>();
|
||||
@@ -37,8 +61,16 @@ bool TextureFactory::process(LUS::BinaryWriter* writer, YAML::Node& data, std::v
|
||||
if(data["mio0"]){
|
||||
auto mio0 = data["mio0"].as<size_t>();
|
||||
auto decoded = MIO0Decoder::Decode(buffer, offset);
|
||||
WRITE_U32(size);
|
||||
WRITE_ARRAY(decoded.data() + mio0, size);
|
||||
auto data = decoded.data() + mio0;
|
||||
if(type == TextureType::GrayscaleAlpha1bpp){
|
||||
auto ia8 = alloc_ia8_text_from_i1((uint16_t*)data, 8, 16);
|
||||
WRITE_U32(8 * 16);
|
||||
WRITE_ARRAY(ia8, 8 * 16);
|
||||
delete[] ia8;
|
||||
} else {
|
||||
WRITE_U32(size);
|
||||
WRITE_ARRAY(data, size);
|
||||
}
|
||||
} else {
|
||||
WRITE_U32(size);
|
||||
WRITE_ARRAY(buffer.data() + offset, size);
|
||||
|
||||
@@ -10,6 +10,7 @@ enum class TextureType {
|
||||
Palette8bpp,
|
||||
Grayscale4bpp,
|
||||
Grayscale8bpp,
|
||||
GrayscaleAlpha1bpp,
|
||||
GrayscaleAlpha4bpp,
|
||||
GrayscaleAlpha8bpp,
|
||||
GrayscaleAlpha16bpp,
|
||||
|
||||
Reference in New Issue
Block a user