Add bclim support
This commit is contained in:
@@ -1,8 +1,9 @@
|
||||
#pragma once
|
||||
|
||||
#include <ctrff/3dsx.hpp>
|
||||
#include <ctrff/bclim.hpp>
|
||||
#include <ctrff/bcstm.hpp>
|
||||
#include <ctrff/bcwav.hpp>
|
||||
#include <ctrff/binutil.hpp>
|
||||
#include <ctrff/lz11.hpp>
|
||||
#include <ctrff/smdh.hpp>
|
||||
#include <ctrff/smdh.hpp>
|
||||
94
include/ctrff/bclim.hpp
Normal file
94
include/ctrff/bclim.hpp
Normal file
@@ -0,0 +1,94 @@
|
||||
#pragma once
|
||||
|
||||
#include <cstring>
|
||||
#include <ctrff/binutil.hpp>
|
||||
#include <ctrff/helper.hpp>
|
||||
#include <ctrff/types.hpp>
|
||||
#include <filesystem>
|
||||
|
||||
namespace ctrff {
|
||||
class CTRFF_API BCLIM : public BinFile {
|
||||
public:
|
||||
BCLIM() {}
|
||||
~BCLIM() {}
|
||||
|
||||
enum Format : u32 {
|
||||
L8,
|
||||
A8, // tested
|
||||
LA4,
|
||||
LA8,
|
||||
HILO8,
|
||||
RGB565, // tested
|
||||
RGB888,
|
||||
RGBA5551,
|
||||
RGBA4444,
|
||||
RGBA8888, // tested
|
||||
ETC1,
|
||||
ETC1A4,
|
||||
L4,
|
||||
A4,
|
||||
};
|
||||
|
||||
struct Header {
|
||||
static Header Default() {
|
||||
Header h;
|
||||
h.Magic = 0x4d494c43;
|
||||
h.Endianness = 0xfeff;
|
||||
h.HeaderSize = 0x14;
|
||||
h.Version = 0x2020000;
|
||||
h.FileSize = 0;
|
||||
h.NumSections = 0;
|
||||
return h;
|
||||
}
|
||||
u32 Magic; // 0x4d494c43 "CLIM"
|
||||
u16 Endianness;
|
||||
u16 HeaderSize;
|
||||
u32 Version;
|
||||
u32 FileSize;
|
||||
u32 NumSections;
|
||||
};
|
||||
|
||||
struct ImagHeader {
|
||||
static ImagHeader Default() {
|
||||
ImagHeader h;
|
||||
h.Magic = 0x67616d69;
|
||||
h.HeaderSize = 0x14;
|
||||
h.Width = 0;
|
||||
h.Height = 0;
|
||||
h.Format = A8;
|
||||
h.ImageSize = 0;
|
||||
return h;
|
||||
}
|
||||
u32 Magic; // 0x67616d69 "imag"
|
||||
u32 HeaderSize;
|
||||
u16 Width;
|
||||
u16 Height;
|
||||
u32 Format; // A bit waste of data lol
|
||||
u32 ImageSize;
|
||||
};
|
||||
|
||||
void Load(const std::string& path) {
|
||||
std::fstream f(path, std::ios::in | std::ios::binary);
|
||||
Read(f);
|
||||
f.close();
|
||||
}
|
||||
|
||||
void Save(const std::string& path) {
|
||||
std::fstream f(path, std::ios::out | std::ios::binary);
|
||||
Write(f);
|
||||
f.close();
|
||||
}
|
||||
|
||||
void CreateByImage(const std::vector<u8>& data, int w, int h, Format fmt);
|
||||
|
||||
/** Write not supported btw */
|
||||
void Write(std::fstream& f) const override;
|
||||
void Read(std::fstream& f) override;
|
||||
|
||||
private:
|
||||
std::vector<u8> pBuffer;
|
||||
Header pCurrent;
|
||||
ImagHeader pImag;
|
||||
bool CreateMode = false;
|
||||
};
|
||||
} // namespace ctrff
|
||||
@@ -12,4 +12,5 @@ CTRFF_API void RGBA2RGB565(ctrff::u16 *out, const std::vector<ctrff::u8> &img,
|
||||
const int &w, const int &h);
|
||||
CTRFF_API std::vector<ctrff::u8> DownscaleImage(
|
||||
const std::vector<ctrff::u8> &img, int w, int h, int scale);
|
||||
CTRFF_API ctrff::u32 TileIndex(const int &x, const int &y, const int &w);
|
||||
} // namespace ctrff
|
||||
Reference in New Issue
Block a user