summaryrefslogtreecommitdiff
path: root/src/factories/TextureFactory.cpp
diff options
context:
space:
mode:
authorKiritoDv <kiritodev01@gmail.com>2024-01-30 01:25:46 -0600
committerLywx <kiritodev01@gmail.com>2024-01-31 12:05:40 -0600
commit242f8acf212d143443dc2ce846507bdb82571902 (patch)
tree4b4d30a587431b36975d1a25ff47ddd8d4dd0455 /src/factories/TextureFactory.cpp
parentc54ef39005eabc17921436f3cc2482ef8efb0bcd (diff)
Swapped mio with offset and fixed samples and animations
Diffstat (limited to 'src/factories/TextureFactory.cpp')
-rw-r--r--src/factories/TextureFactory.cpp25
1 files changed, 14 insertions, 11 deletions
diff --git a/src/factories/TextureFactory.cpp b/src/factories/TextureFactory.cpp
index f49db17..3759737 100644
--- a/src/factories/TextureFactory.cpp
+++ b/src/factories/TextureFactory.cpp
@@ -17,14 +17,14 @@ static const std::unordered_map <std::string, TextureType> gTextureTypes = {
{ "IA16", TextureType::GrayscaleAlpha16bpp },
};
-uint8_t* alloc_ia8_text_from_i1(uint16_t *in, int16_t width, int16_t height) {
+std::vector<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;
- auto out = new uint8_t[width * height];
+ const auto out = new uint8_t[width * height];
- for (inPos = 0; inPos < (width * height) / 16; inPos++) {
- bitMask = 0x8000;
+ for (int32_t inPos = 0; inPos < (width * height) / 16; inPos++) {
+ uint16_t bitMask = 0x8000;
while (bitMask != 0) {
if (BSWAP16(in[inPos]) & bitMask) {
@@ -38,7 +38,10 @@ uint8_t* alloc_ia8_text_from_i1(uint16_t *in, int16_t width, int16_t height) {
}
}
- return out;
+ auto result = std::vector(out, out + width * height);
+ delete[] out;
+
+ return result;
}
void TextureHeaderExporter::Export(std::ostream &write, std::shared_ptr<IParsedData> raw, std::string& entryName, YAML::Node &node, std::string* replacement) {
@@ -126,16 +129,16 @@ std::optional<std::shared_ptr<IParsedData>> TextureFactory::parse(std::vector<ui
std::vector<uint8_t> result;
if(node["mio0"]){
+ auto decoded = MIO0Decoder::Decode(buffer, offset);
auto mio0 = node["mio0"].as<size_t>();
- auto decoded = MIO0Decoder::Decode(buffer, mio0);
- auto data = decoded.data() + offset;
+ auto data = decoded.data() + mio0;
+
if(type == TextureType::GrayscaleAlpha1bpp){
- auto ia8 = alloc_ia8_text_from_i1((uint16_t*) data, 8, 16);
- result = std::vector(ia8, ia8 + 8 * 16);
- delete[] ia8;
+ result = alloc_ia8_text_from_i1((uint16_t*) data, 8, 16);
+ } else {
+ result = std::vector(data, data + size);
}
- result = std::vector(data, data + size);
} else {
result = std::vector(buffer.data() + offset, buffer.data() + offset + size);
}