Some checks reported errors
		
		
	
	continuous-integration/drone/push Build was killed
				
			Reviewed-on: #59 Co-authored-by: light7734 <light7734@tuta.io> Co-committed-by: light7734 <light7734@tuta.io>
		
			
				
	
	
		
			74 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
#pragma once
 | 
						|
 | 
						|
#include <assets/metadata.hpp>
 | 
						|
 | 
						|
namespace lt::assets {
 | 
						|
 | 
						|
class ShaderAsset
 | 
						|
{
 | 
						|
public:
 | 
						|
	static constexpr auto asset_type_identifier = Type_T { "SHADER_________" };
 | 
						|
 | 
						|
	enum class BlobTag : Tag_T
 | 
						|
	{
 | 
						|
		code,
 | 
						|
	};
 | 
						|
 | 
						|
	enum class Type : uint8_t
 | 
						|
	{
 | 
						|
		vertex,
 | 
						|
		fragment,
 | 
						|
		geometry,
 | 
						|
		compute,
 | 
						|
	};
 | 
						|
 | 
						|
	struct Metadata
 | 
						|
	{
 | 
						|
		Type type;
 | 
						|
	};
 | 
						|
 | 
						|
	static void pack(
 | 
						|
	    const std::filesystem::path &destination,
 | 
						|
	    AssetMetadata asset_metadata,
 | 
						|
	    Metadata metadata,
 | 
						|
	    Blob code_blob
 | 
						|
	);
 | 
						|
 | 
						|
	ShaderAsset(const std::filesystem::path &path);
 | 
						|
 | 
						|
	void unpack_to(BlobTag tag, std::span<std::byte> destination) const;
 | 
						|
 | 
						|
	[[nodiscard]] auto unpack(BlobTag tag) const -> Blob;
 | 
						|
 | 
						|
	[[nodiscard]] auto get_asset_metadata() const -> const AssetMetadata &
 | 
						|
	{
 | 
						|
		return m_asset_metadata;
 | 
						|
	}
 | 
						|
 | 
						|
	[[nodiscard]] auto get_metadata() const -> const Metadata &
 | 
						|
	{
 | 
						|
		return m_metadata;
 | 
						|
	}
 | 
						|
 | 
						|
	[[nodiscard]] auto get_blob_metadata(BlobTag tag) const -> const BlobMetadata &
 | 
						|
	{
 | 
						|
		ensure(
 | 
						|
		    tag == BlobTag::code,
 | 
						|
		    "Invalid blob tag for shader asset: {}",
 | 
						|
		    std::to_underlying(tag)
 | 
						|
		);
 | 
						|
 | 
						|
		return m_code_blob_metadata;
 | 
						|
	}
 | 
						|
 | 
						|
private:
 | 
						|
	AssetMetadata m_asset_metadata {};
 | 
						|
 | 
						|
	Metadata m_metadata {};
 | 
						|
 | 
						|
	BlobMetadata m_code_blob_metadata {};
 | 
						|
 | 
						|
	mutable std::ifstream m_stream;
 | 
						|
};
 | 
						|
 | 
						|
} // namespace lt::assets
 |