#ifndef HGL_GRAPH_TEXTURE_LOADER_INCLUDE #define HGL_GRAPH_TEXTURE_LOADER_INCLUDE #include #include #include #include namespace hgl { namespace graph { constexpr VkFormat CompressFormatList[]= { PF_BC1_RGBUN, PF_BC1_RGBAUN, PF_BC2UN, PF_BC3UN, PF_BC4UN, PF_BC5UN, PF_BC6UF, PF_BC6SF, PF_BC7UN }; constexpr uint32 CompressFormatBits[]={4,4,8,8,4,8,8,8,8}; constexpr uint32 CompressFormatCount=sizeof(CompressFormatList)/sizeof(VkFormat); #pragma pack(push,1) struct Tex2DFileHeader { uint8 id[6]; ///>3;} };//struct TexPixelFormat #pragma pack(pop) /** * 2D纹理加载器 */ class Texture2DLoader { protected: Tex2DFileHeader file_header; union { TexPixelFormat pixel_format; uint16 compress_format; }; protected: uint32 mipmap_zero_total_bytes; uint32 ComputeTotalBytes(); virtual void *OnBegin(uint32)=0; virtual void OnEnd()=0; virtual void OnError(){} public: const Tex2DFileHeader *GetFileHeader()const{return &file_header;} public: virtual ~Texture2DLoader()=default; bool Load(io::InputStream *is); bool Load(const OSString &filename); };//class Texture2DLoader /** * 2D位图加载 */ class Bitmap2DLoader:public Texture2DLoader { protected: BitmapData *bmp=nullptr; public: ~Bitmap2DLoader(); void *OnBegin(uint32 total_bytes) override; void OnEnd() override {} BitmapData *GetBitmap(); };//class Bitmap2DLoader BitmapData *LoadBitmapFromFile(const OSString &filename); }//namespace graph }//namespace hgl #endif//HGL_GRAPH_TEXTURE_LOADER_INCLUDE