(WIP)support newly material file,can't use.
This commit is contained in:
parent
903f9081eb
commit
ba6367556b
@ -1 +1 @@
|
||||
Subproject commit 2940b99b99cfe575dd45103ef20f4019dee15b54
|
||||
Subproject commit 97a78cdd429f33a7c074fd0d7649012eec20d43a
|
@ -1 +1 @@
|
||||
Subproject commit 9be589598595963f94ba264d7b416d0533421106
|
||||
Subproject commit c39fbdac0f0f6638d5cfca43988750a1aac512db
|
@ -1 +1 @@
|
||||
Subproject commit 630770496d8d78dd6c06511ba180dbe4ddf14f94
|
||||
Subproject commit b61ed5cbfad8b76339ef1b2564ca03ffe34de7cc
|
2
CMCore
2
CMCore
@ -1 +1 @@
|
||||
Subproject commit 468aa4462224a722b334d7140723b169556ba368
|
||||
Subproject commit 9c5cb2dc4a946906be186e10a3c0a4fb67d2a912
|
@ -1 +1 @@
|
||||
Subproject commit e2f056ddff2e1adacd6431c685af9c0ed8177e06
|
||||
Subproject commit 7a5040224a162cd63f54e28d31eaf7eb710b48a0
|
2
CMUtil
2
CMUtil
@ -1 +1 @@
|
||||
Subproject commit 9982ca25af1a52981054af8636dfc5f3e2ea59c9
|
||||
Subproject commit 8ce98c85a397921277cd19a91993b6724bf1d391
|
@ -195,9 +195,9 @@ public: //shader & material
|
||||
|
||||
ShaderModule *CreateShaderModule(ShaderResource *);
|
||||
|
||||
Material *CreateMaterial(const UTF8String &mtl_name,ShaderModuleMap *shader_maps);
|
||||
Material *CreateMaterial(const UTF8String &mtl_name,const VertexShaderModule *vertex_shader_module,const ShaderModule *fragment_shader_module);
|
||||
Material *CreateMaterial(const UTF8String &mtl_name,const VertexShaderModule *vertex_shader_module,const ShaderModule *geometry_shader_module,const ShaderModule *fragment_shader_module);
|
||||
Material *CreateMaterial(const UTF8String &mtl_name,ShaderModuleMap *shader_maps,MaterialDescriptorSets *);
|
||||
Material *CreateMaterial(const UTF8String &mtl_name,const VertexShaderModule *vertex_shader_module,const ShaderModule *fragment_shader_module,MaterialDescriptorSets *);
|
||||
Material *CreateMaterial(const UTF8String &mtl_name,const VertexShaderModule *vertex_shader_module,const ShaderModule *geometry_shader_module,const ShaderModule *fragment_shader_module,MaterialDescriptorSets *);
|
||||
|
||||
public: //Command Buffer 相关
|
||||
|
||||
|
@ -88,11 +88,7 @@ public: // VBO/VAO
|
||||
public: //Material
|
||||
|
||||
const ShaderModule *CreateShaderModule(const OSString &filename,ShaderResource *shader_resource);
|
||||
const ShaderModule *CreateShaderModule(const OSString &filename);
|
||||
|
||||
Material * CreateMaterial(const UTF8String &mtl_name,const OSString &vertex_shader_filename,const OSString &fragment_shader_filename);
|
||||
Material * CreateMaterial(const UTF8String &mtl_name,const OSString &vertex_shader_filename,const OSString &geometry_shader_filename,const OSString &fragment_shader_filename);
|
||||
|
||||
Material * CreateMaterial(const OSString &);
|
||||
MaterialInstance * CreateMaterialInstance(Material *);
|
||||
MaterialInstance * CreateMaterialInstance(const OSString &);
|
||||
|
@ -30,6 +30,7 @@ struct ShaderDescriptor
|
||||
DescriptorSetType set_type;
|
||||
uint32_t set;
|
||||
uint32_t binding;
|
||||
uint32_t stage_flag;
|
||||
};
|
||||
|
||||
using ShaderDescriptorList=List<ShaderDescriptor>;
|
||||
@ -46,6 +47,37 @@ constexpr size_t VK_DESCRIPTOR_TYPE_END_RANGE=VK_DESCRIPTOR_TYPE_INPUT_ATTACHMEN
|
||||
constexpr size_t VK_DESCRIPTOR_TYPE_RANGE_SIZE=VK_DESCRIPTOR_TYPE_END_RANGE-VK_DESCRIPTOR_TYPE_BEGIN_RANGE+1;
|
||||
#endif//VK_DESCRIPTOR_TYPE_RANGE_SIZE
|
||||
|
||||
class MaterialDescriptorSets
|
||||
{
|
||||
ShaderDescriptorList descriptor_list[VK_DESCRIPTOR_TYPE_RANGE_SIZE];
|
||||
|
||||
public:
|
||||
|
||||
const ShaderDescriptorList * GetDescriptorList ()const {return descriptor_list;}
|
||||
ShaderDescriptorList * GetDescriptorList (VkDescriptorType desc_type)
|
||||
{
|
||||
if(desc_type<VK_DESCRIPTOR_TYPE_BEGIN_RANGE
|
||||
||desc_type>VK_DESCRIPTOR_TYPE_END_RANGE)return nullptr;
|
||||
|
||||
return descriptor_list+desc_type;
|
||||
}
|
||||
|
||||
ShaderDescriptorList &GetUBO (){return descriptor_list[VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER];}
|
||||
ShaderDescriptorList &GetSSBO (){return descriptor_list[VK_DESCRIPTOR_TYPE_STORAGE_BUFFER];}
|
||||
ShaderDescriptorList &GetUBODynamic (){return descriptor_list[VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC];}
|
||||
ShaderDescriptorList &GetSSBODynamic(){return descriptor_list[VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC];}
|
||||
ShaderDescriptorList &GetSampler (){return descriptor_list[VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER];}
|
||||
|
||||
const int GetBinding (VkDescriptorType desc_type,const AnsiString &name)const;
|
||||
//const DescriptorBindingList * GetBindingList (VkDescriptorType desc_type)const
|
||||
//{
|
||||
// if(desc_type<VK_DESCRIPTOR_TYPE_BEGIN_RANGE
|
||||
// ||desc_type>VK_DESCRIPTOR_TYPE_END_RANGE)return nullptr;
|
||||
|
||||
// return &(descriptor_list[desc_type].binding_list);
|
||||
//}
|
||||
};//
|
||||
|
||||
class ShaderResource
|
||||
{
|
||||
VkShaderStageFlagBits stage_flag;
|
||||
@ -56,8 +88,6 @@ class ShaderResource
|
||||
ShaderStageList stage_inputs;
|
||||
ShaderStageList stage_outputs;
|
||||
|
||||
ShaderDescriptorList descriptor_list[VK_DESCRIPTOR_TYPE_RANGE_SIZE];
|
||||
|
||||
public:
|
||||
|
||||
ShaderResource(const VkShaderStageFlagBits &,const void *,const uint32);
|
||||
@ -77,34 +107,9 @@ public:
|
||||
|
||||
const ShaderStage * GetStageInput (const AnsiString &)const;
|
||||
const int GetStageInputBinding(const AnsiString &)const;
|
||||
|
||||
const ShaderDescriptorList * GetDescriptorList ()const {return descriptor_list;}
|
||||
ShaderDescriptorList * GetDescriptorList (VkDescriptorType desc_type)
|
||||
{
|
||||
if(desc_type<VK_DESCRIPTOR_TYPE_BEGIN_RANGE
|
||||
||desc_type>VK_DESCRIPTOR_TYPE_END_RANGE)return nullptr;
|
||||
|
||||
return descriptor_list+desc_type;
|
||||
}
|
||||
|
||||
ShaderDescriptorList &GetUBO (){return descriptor_list[VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER];}
|
||||
ShaderDescriptorList &GetSSBO (){return descriptor_list[VK_DESCRIPTOR_TYPE_STORAGE_BUFFER];}
|
||||
ShaderDescriptorList &GetUBODynamic (){return descriptor_list[VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC];}
|
||||
ShaderDescriptorList &GetSSBODynamic(){return descriptor_list[VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC];}
|
||||
ShaderDescriptorList &GetSampler(){return descriptor_list[VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER];}
|
||||
|
||||
const int GetBinding (VkDescriptorType desc_type,const AnsiString &name)const;
|
||||
//const DescriptorBindingList * GetBindingList (VkDescriptorType desc_type)const
|
||||
//{
|
||||
// if(desc_type<VK_DESCRIPTOR_TYPE_BEGIN_RANGE
|
||||
// ||desc_type>VK_DESCRIPTOR_TYPE_END_RANGE)return nullptr;
|
||||
|
||||
// return &(descriptor_list[desc_type].binding_list);
|
||||
//}
|
||||
};//class ShaderResource
|
||||
|
||||
ShaderResource *LoadShaderResource(const uint8 *origin_filedata,const int64 filesize,bool include_file_header);
|
||||
ShaderResource *LoadShaderResoruce(const OSString &filename);
|
||||
ShaderResource *LoadShaderResource(const uint8 *origin_filedata,const int64 filesize);
|
||||
|
||||
struct ShaderModuleCreateInfo:public vkstruct_flag<VkShaderModuleCreateInfo,VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO>
|
||||
{
|
||||
|
2
res
2
res
@ -1 +1 @@
|
||||
Subproject commit 9f031f98a611172812ceb4094af0f032218c5e91
|
||||
Subproject commit a0c84d12663e1d0ce0ad22faa5cd89ede26af90f
|
@ -3,7 +3,7 @@
|
||||
#include"VKDescriptorSetLayoutCreater.h"
|
||||
|
||||
VK_NAMESPACE_BEGIN
|
||||
Material *GPUDevice::CreateMaterial(const UTF8String &mtl_name,ShaderModuleMap *shader_maps)
|
||||
Material *GPUDevice::CreateMaterial(const UTF8String &mtl_name,ShaderModuleMap *shader_maps,MaterialDescriptorSets *mds)
|
||||
{
|
||||
const int shader_count=shader_maps->GetCount();
|
||||
|
||||
@ -45,7 +45,7 @@ Material *GPUDevice::CreateMaterial(const UTF8String &mtl_name,ShaderModuleMap *
|
||||
return(new Material(mtl_name,shader_maps,shader_stage_list,dsl_creater));
|
||||
}
|
||||
|
||||
Material *GPUDevice::CreateMaterial(const UTF8String &mtl_name,const VertexShaderModule *vertex_shader_module,const ShaderModule *fragment_shader_module)
|
||||
Material *GPUDevice::CreateMaterial(const UTF8String &mtl_name,const VertexShaderModule *vertex_shader_module,const ShaderModule *fragment_shader_module,MaterialDescriptorSets *mds)
|
||||
{
|
||||
if(!vertex_shader_module||!fragment_shader_module)
|
||||
return(nullptr);
|
||||
@ -58,10 +58,10 @@ Material *GPUDevice::CreateMaterial(const UTF8String &mtl_name,const VertexShade
|
||||
smm->Add(vertex_shader_module);
|
||||
smm->Add(fragment_shader_module);
|
||||
|
||||
return CreateMaterial(mtl_name,smm);
|
||||
return CreateMaterial(mtl_name,smm,mds);
|
||||
}
|
||||
|
||||
Material *GPUDevice::CreateMaterial(const UTF8String &mtl_name,const VertexShaderModule *vertex_shader_module,const ShaderModule *geometry_shader_module,const ShaderModule *fragment_shader_module)
|
||||
Material *GPUDevice::CreateMaterial(const UTF8String &mtl_name,const VertexShaderModule *vertex_shader_module,const ShaderModule *geometry_shader_module,const ShaderModule *fragment_shader_module,MaterialDescriptorSets *mds)
|
||||
{
|
||||
if(!vertex_shader_module
|
||||
||!geometry_shader_module
|
||||
@ -78,6 +78,6 @@ Material *GPUDevice::CreateMaterial(const UTF8String &mtl_name,const VertexShade
|
||||
smm->Add(geometry_shader_module);
|
||||
smm->Add(fragment_shader_module);
|
||||
|
||||
return CreateMaterial(mtl_name,smm);
|
||||
return CreateMaterial(mtl_name,smm,mds);
|
||||
}
|
||||
VK_NAMESPACE_END
|
@ -26,57 +26,50 @@ const ShaderModule *RenderResource::CreateShaderModule(const OSString &filename,
|
||||
return sm;
|
||||
}
|
||||
|
||||
const ShaderModule *RenderResource::CreateShaderModule(const OSString &filename)
|
||||
{
|
||||
ShaderModule *sm;
|
||||
const bool LoadShaderDescriptor(ShaderResource *sr,const uint8 *data)
|
||||
{
|
||||
const uint8 count=*data++;
|
||||
|
||||
if(shader_module_by_name.Get(filename,sm))
|
||||
return sm;
|
||||
if(count<=0)return(true);
|
||||
|
||||
ShaderResource *shader_resource=LoadShaderResoruce(filename);
|
||||
ShaderDescriptorList *sd_list;
|
||||
const VkDescriptorType desc_type;
|
||||
|
||||
if(!shader_resource)return(nullptr);
|
||||
|
||||
sm=device->CreateShaderModule(shader_resource);
|
||||
|
||||
shader_module_by_name.Add(filename,sm);
|
||||
uint str_len;
|
||||
|
||||
return sm;
|
||||
}
|
||||
sd_list->SetCount(count);
|
||||
|
||||
Material *RenderResource::CreateMaterial(const UTF8String &mtl_name,const OSString &vertex_shader_filename,const OSString &fragment_shader_filename)
|
||||
{
|
||||
const ShaderModule *vs=CreateShaderModule(vertex_shader_filename);
|
||||
ShaderDescriptor *sd=sd_list->GetData();
|
||||
|
||||
if(!vs)
|
||||
return(nullptr);
|
||||
for(uint i=0;i<count;i++)
|
||||
{
|
||||
sd->set=*data++;
|
||||
sd->binding=*data++;
|
||||
str_len=*data++;
|
||||
|
||||
const ShaderModule *fs=CreateShaderModule(fragment_shader_filename);
|
||||
memcpy(sd->name,(char *)data,str_len);
|
||||
sd->name[str_len]=0;
|
||||
data+=str_len;
|
||||
|
||||
if(!fs)
|
||||
return(nullptr);
|
||||
sd->set_type=CheckDescriptorSetType(sd->name);
|
||||
|
||||
return(device->CreateMaterial(mtl_name,(VertexShaderModule *)vs,fs));
|
||||
}
|
||||
if(sd->set_type==DescriptorSetType::Renderable)
|
||||
{
|
||||
if(desc_type==VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER)sd->desc_type=VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC;else
|
||||
if(desc_type==VK_DESCRIPTOR_TYPE_STORAGE_BUFFER)sd->desc_type=VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC;else
|
||||
sd->desc_type=desc_type;
|
||||
}
|
||||
else
|
||||
{
|
||||
sd->desc_type=desc_type;
|
||||
}
|
||||
|
||||
Material *RenderResource::CreateMaterial(const UTF8String &mtl_name,const OSString &vertex_shader_filename,const OSString &geometry_shader_filename,const OSString &fragment_shader_filename)
|
||||
{
|
||||
const ShaderModule *vs=CreateShaderModule(vertex_shader_filename);
|
||||
++sd;
|
||||
}
|
||||
|
||||
if(!vs)
|
||||
return(nullptr);
|
||||
|
||||
const ShaderModule *gs=CreateShaderModule(geometry_shader_filename);
|
||||
|
||||
if(!gs)
|
||||
return(nullptr);
|
||||
|
||||
const ShaderModule *fs=CreateShaderModule(fragment_shader_filename);
|
||||
|
||||
if(!fs)
|
||||
return(nullptr);
|
||||
|
||||
return(device->CreateMaterial(mtl_name,(VertexShaderModule *)vs,gs,fs));
|
||||
return data;
|
||||
}
|
||||
|
||||
Material *RenderResource::CreateMaterial(const OSString &filename)
|
||||
@ -104,24 +97,21 @@ Material *RenderResource::CreateMaterial(const OSString &filename)
|
||||
return(nullptr);
|
||||
|
||||
const uint8 *sp=origin_filedata;
|
||||
int64 left=filesize;
|
||||
const uint8 *end=sp+filesize;
|
||||
|
||||
if(memcmp(sp,MaterialFileHeader,MaterialFileHeaderLength)!=0)
|
||||
return(nullptr);
|
||||
|
||||
sp+=MaterialFileHeaderLength;
|
||||
left-=MaterialFileHeaderLength;
|
||||
|
||||
const uint8 ver=*sp;
|
||||
++sp;
|
||||
--left;
|
||||
|
||||
if(ver!=1)
|
||||
if(ver!=2)
|
||||
return(nullptr);
|
||||
|
||||
const uint32_t shader_bits=*(uint32_t *)sp;
|
||||
sp+=sizeof(uint32_t);
|
||||
left-=sizeof(uint32_t);
|
||||
|
||||
const uint count=GetShaderCountByBits(shader_bits);
|
||||
uint32_t size;
|
||||
@ -138,11 +128,9 @@ Material *RenderResource::CreateMaterial(const OSString &filename)
|
||||
{
|
||||
size=*(uint32_t *)sp;
|
||||
sp+=sizeof(uint32_t);
|
||||
left-=sizeof(uint32_t);
|
||||
|
||||
sr=LoadShaderResource(sp,size,false);
|
||||
sr=LoadShaderResource(sp,size);
|
||||
sp+=size;
|
||||
left-=size;
|
||||
|
||||
if(sr)
|
||||
{
|
||||
@ -155,12 +143,15 @@ Material *RenderResource::CreateMaterial(const OSString &filename)
|
||||
if(smm->Add(sm))
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
result=false;
|
||||
break;
|
||||
}
|
||||
|
||||
if(!LoadShaderDescriptor(sr,filedata))
|
||||
result=false;
|
||||
|
||||
if(result)
|
||||
{
|
||||
mtl=device->CreateMaterial(ToUTF8String(filename),smm);
|
||||
|
@ -40,8 +40,6 @@ VK_NAMESPACE_BEGIN
|
||||
if(count<=0)
|
||||
return(data);
|
||||
|
||||
const uint32 total_bytes=AccessByPointer(data,uint32);
|
||||
|
||||
int str_len;
|
||||
|
||||
ShaderStage *ss;
|
||||
@ -50,11 +48,11 @@ VK_NAMESPACE_BEGIN
|
||||
{
|
||||
ss=new ShaderStage;
|
||||
|
||||
ss->location=*data++;
|
||||
ss->type.basetype=(VertexAttribBaseType)*data++;
|
||||
ss->type.vec_size=*data++;
|
||||
ss->location =*data++;
|
||||
ss->type.basetype =(VertexAttribBaseType)*data++;
|
||||
ss->type.vec_size =*data++;
|
||||
|
||||
ss->format=VK_NAMESPACE::GetVulkanFormat(&(ss->type));
|
||||
ss->format =VK_NAMESPACE::GetVulkanFormat(&(ss->type));
|
||||
|
||||
str_len=*data++;
|
||||
ss->name.SetString((char *)data,str_len);
|
||||
@ -67,51 +65,6 @@ VK_NAMESPACE_BEGIN
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
const uint8 *LoadShaderDescriptor(const uint8_t version,ShaderDescriptorList *sd_list,const VkDescriptorType desc_type,const uint8 *data)
|
||||
{
|
||||
const uint32 total_bytes=AccessByPointer(data,uint32);
|
||||
|
||||
const uint count=*data++;
|
||||
|
||||
uint str_len;
|
||||
|
||||
sd_list->SetCount(count);
|
||||
|
||||
ShaderDescriptor *sd=sd_list->GetData();
|
||||
|
||||
for(uint i=0;i<count;i++)
|
||||
{
|
||||
if(version>=1)
|
||||
sd->set=*data++;
|
||||
else
|
||||
sd->set=0;
|
||||
|
||||
sd->binding=*data++;
|
||||
str_len=*data++;
|
||||
|
||||
memcpy(sd->name,(char *)data,str_len);
|
||||
sd->name[str_len]=0;
|
||||
data+=str_len;
|
||||
|
||||
sd->set_type=CheckDescriptorSetType(sd->name);
|
||||
|
||||
if(sd->set_type==DescriptorSetType::Renderable)
|
||||
{
|
||||
if(desc_type==VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER)sd->desc_type=VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC;else
|
||||
if(desc_type==VK_DESCRIPTOR_TYPE_STORAGE_BUFFER)sd->desc_type=VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC;else
|
||||
sd->desc_type=desc_type;
|
||||
}
|
||||
else
|
||||
{
|
||||
sd->desc_type=desc_type;
|
||||
}
|
||||
|
||||
++sd;
|
||||
}
|
||||
|
||||
return data;
|
||||
}
|
||||
}//namespcae
|
||||
|
||||
ShaderResource::ShaderResource(const VkShaderStageFlagBits &flag,const void *sd,const uint32 size)
|
||||
@ -195,31 +148,16 @@ VK_NAMESPACE_BEGIN
|
||||
return -1;
|
||||
}
|
||||
|
||||
ShaderResource *LoadShaderResource(const uint8 *origin_filedata,const int64 filesize,bool include_file_header)
|
||||
ShaderResource *LoadShaderResource(const uint8 *origin_filedata,const int64 filesize)
|
||||
{
|
||||
if(!origin_filedata)return(nullptr);
|
||||
|
||||
const uint8 *filedata=origin_filedata;
|
||||
const uint8 *file_end=filedata+filesize;
|
||||
|
||||
if(include_file_header)
|
||||
{
|
||||
if(filesize<SHADER_FILE_MIN_SIZE
|
||||
||memcmp(origin_filedata,SHADER_FILE_HEADER,SHADER_FILE_HEADER_BYTES))
|
||||
{
|
||||
delete[] origin_filedata;
|
||||
return(nullptr);
|
||||
}
|
||||
|
||||
filedata+=SHADER_FILE_HEADER_BYTES;
|
||||
}
|
||||
|
||||
uint8 version;
|
||||
VkShaderStageFlagBits flag;
|
||||
uint32 spv_size;
|
||||
uint32 desc_type;
|
||||
|
||||
version =AccessByPointer(filedata,uint8);
|
||||
flag =(const VkShaderStageFlagBits)AccessByPointer(filedata,uint32);
|
||||
spv_size=AccessByPointer(filedata,uint32);
|
||||
|
||||
@ -230,37 +168,6 @@ VK_NAMESPACE_BEGIN
|
||||
filedata=LoadShaderStages(sr->GetStageInputs(),filedata);
|
||||
filedata=LoadShaderStages(sr->GetStageOutputs(),filedata);
|
||||
|
||||
while(filedata<file_end)
|
||||
{
|
||||
desc_type=AccessByPointer(filedata,uint32);
|
||||
|
||||
filedata=LoadShaderDescriptor(version,sr->GetDescriptorList((VkDescriptorType)desc_type),(VkDescriptorType)desc_type,filedata);
|
||||
}
|
||||
|
||||
return sr;
|
||||
}
|
||||
|
||||
ShaderResource *LoadShaderResoruce(const OSString &filename)
|
||||
{
|
||||
ShaderResource *sr;
|
||||
|
||||
if(shader_resource_by_filename.Get(filename,sr))
|
||||
return sr;
|
||||
|
||||
int64 filesize;
|
||||
uint8 *filedata=(uint8 *)filesystem::LoadFileToMemory(filename+OS_TEXT(".shader"),filesize);
|
||||
|
||||
if(!filedata)
|
||||
{
|
||||
shader_resource_by_filename.Add(filename,nullptr);
|
||||
return(nullptr);
|
||||
}
|
||||
|
||||
AutoDeleteArray<uint8> origin_filedata(filedata,filesize);
|
||||
|
||||
sr=LoadShaderResource(origin_filedata,filesize,true);
|
||||
|
||||
shader_resource_by_filename.Add(filename,sr);
|
||||
return sr;
|
||||
}
|
||||
VK_NAMESPACE_END
|
||||
|
Loading…
x
Reference in New Issue
Block a user