68 lines
		
	
	
	
		
			1,022 B
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			68 lines
		
	
	
	
		
			1,022 B
		
	
	
	
		
			C++
		
	
	
	
	
	
| #pragma once
 | |
| 
 | |
| #include <asset_parser/compressors/compressors.hpp>
 | |
| #include <cstdint>
 | |
| #include <filesystem>
 | |
| #include <fstream>
 | |
| #include <logger/logger.hpp>
 | |
| #include <utility>
 | |
| #include <vector>
 | |
| 
 | |
| namespace Assets {
 | |
| 
 | |
| constexpr auto current_version = uint32_t { 1 };
 | |
| 
 | |
| struct BlobMetadata
 | |
| {
 | |
| 	enum class Tag : uint8_t
 | |
| 	{
 | |
| 		text,
 | |
| 		color,
 | |
| 		depth,
 | |
| 		vertices,
 | |
| 		indices,
 | |
| 	};
 | |
| 
 | |
| 	Tag tag;
 | |
| 
 | |
| 	size_t offset;
 | |
| 
 | |
| 	CompressionType compression_type;
 | |
| 
 | |
| 	size_t compressed_size;
 | |
| 
 | |
| 	size_t uncompressed_size;
 | |
| };
 | |
| 
 | |
| 
 | |
| using Blob = std::vector<std::byte>;
 | |
| 
 | |
| class Asset
 | |
| {
 | |
| public:
 | |
| 	enum class Type : uint32_t // NOLINT(performance-enum-size)
 | |
| 	{
 | |
| 		None,
 | |
| 		Texture,
 | |
| 		Text,
 | |
| 		Mesh,
 | |
| 		Material,
 | |
| 	};
 | |
| 
 | |
| 	struct Metadata
 | |
| 	{
 | |
| 		Type type;
 | |
| 	};
 | |
| 
 | |
| 	Asset() = default;
 | |
| 
 | |
| 	/** Directly unpacks from disk to the destination.
 | |
| 	 *
 | |
| 	 * @note The destination MUST have at least blob_metadata.unpacked_size bytes available for
 | |
| 	 * writing, otherwise segfault could occur!
 | |
| 	 */
 | |
| 	void unpack_blob(BlobMetadata::Tag blob_tag, std::byte *destination);
 | |
| };
 | |
| 
 | |
| 
 | |
| } // namespace Assets
 |