1
0
mirror of https://gitlab.com/OpenMW/openmw.git synced 2024-12-28 18:18:52 +00:00
OpenMW/components/bsa/ba2dx10file.hpp
2023-03-06 21:26:51 +01:00

68 lines
1.7 KiB
C++

#ifndef BSA_BA2_DX10_FILE_H
#define BSA_BA2_DX10_FILE_H
#include <list>
#include <map>
#include <optional>
#include <string>
#include <vector>
#include <components/bsa/bsa_file.hpp>
namespace Bsa
{
class BA2DX10File : private BSAFile
{
private:
struct TextureChunkRecord
{
uint32_t size = 0;
uint32_t packedSize = 0;
int64_t offset = 0;
uint16_t startMip = 0;
uint16_t endMip = 0;
};
struct FileRecord
{
uint8_t unknownTex = 0;
uint16_t height = 0;
uint16_t width = 0;
uint8_t numMips = 0;
uint8_t DXGIFormat = 0;
uint16_t cubeMaps = 0;
std::vector<TextureChunkRecord> texturesChunks;
};
uint32_t mVersion{ 0u };
using FolderRecord = std::map<std::pair<uint32_t, uint32_t>, FileRecord>;
std::map<uint32_t, FolderRecord> mFolders;
std::list<std::vector<char>> mFileNames;
std::optional<FileRecord> getFileRecord(const std::string& str) const;
Files::IStreamPtr getFile(const FileRecord& fileRecord);
void loadFiles(uint32_t fileCount, std::istream& in);
public:
using BSAFile::getFilename;
using BSAFile::getList;
using BSAFile::open;
BA2DX10File();
virtual ~BA2DX10File();
/// Read header information from the input source
void readHeader() override;
Files::IStreamPtr getFile(const char* filePath);
Files::IStreamPtr getFile(const FileStruct* fileStruct);
void addFile(const std::string& filename, std::istream& file);
};
}
#endif