From 30b5639acc8c1ae21bb0ca646a9b73d0635cb6c2 Mon Sep 17 00:00:00 2001 From: hyzboy Date: Tue, 9 Jun 2020 14:05:20 +0800 Subject: [PATCH] improvement the ShaderResource module --- src/SceneGraph/shader/ShaderResource.cpp | 49 +++++++++++++++++------- 1 file changed, 35 insertions(+), 14 deletions(-) diff --git a/src/SceneGraph/shader/ShaderResource.cpp b/src/SceneGraph/shader/ShaderResource.cpp index 627aa125..64901661 100644 --- a/src/SceneGraph/shader/ShaderResource.cpp +++ b/src/SceneGraph/shader/ShaderResource.cpp @@ -8,10 +8,17 @@ namespace hgl { namespace { - constexpr char SHADER_FILE_HEADER[]="Shader\x1A"; - constexpr uint SHADER_FILE_HEADER_BYTES=sizeof(SHADER_FILE_HEADER)-1; + constexpr char SHADER_FILE_HEADER[] ="Shader\x1A"; + constexpr uint SHADER_FILE_HEADER_BYTES=sizeof(SHADER_FILE_HEADER)-1; - uint8 *LoadShaderStages(ShaderStageList &ss_list,uint8 *data) + constexpr uint32 SHADER_FILE_MIN_SIZE =SHADER_FILE_HEADER_BYTES + +1 //version + +sizeof(uint32) //shader flag + +sizeof(uint32) //spv_size + +1 //input states count + +1; //output states count + + const uint8 *LoadShaderStages(ShaderStageList &ss_list,const uint8 *data) { const uint count=*data++; @@ -47,7 +54,7 @@ namespace hgl return data; } - uint8 *LoadShaderDescriptor(ShaderDescriptorList &sd_list,uint8 *data) + const uint8 *LoadShaderDescriptor(ShaderDescriptorList &sd_list,const uint8 *data) { const uint32 total_bytes=*(uint32 *)data; data+=sizeof(uint32); @@ -72,19 +79,34 @@ namespace hgl } }//namespcae + ShaderResource::ShaderResource(const void *fd,const void *sd,const uint32 size) + { + data=fd; + spv_data=sd; + spv_size=size; + } + + ShaderResource::~ShaderResource() + { + delete[] data; + } + ShaderResource *LoadShaderResoruce(const OSString &filename) { int64 filesize; - AutoDeleteArray origin_filedata=(uint8 *)filesystem::LoadFileToMemory(filename,filesize); + uint8 *origin_filedata=(uint8 *)filesystem::LoadFileToMemory(filename,filesize); - uint8 *filedata=origin_filedata; + if(!origin_filedata)return(nullptr); - if(!filedata)return(nullptr); - - const uint8 *file_end=filedata+filesize; - - if(memcmp(filedata,SHADER_FILE_HEADER,SHADER_FILE_HEADER_BYTES)) + if(filesizeGetInputStages(),filedata); filedata=LoadShaderStages(sr->GetOutputStages(),filedata);