used UTF8String instead of OSString in shader_module_by_name and material_by_name of RenderResource

This commit is contained in:
HuYingzhuo(hugo/hyzboy) 2023-06-05 17:07:37 +08:00
parent ab6a8435a1
commit 01cdb7661b
2 changed files with 14 additions and 15 deletions

View File

@ -36,8 +36,8 @@ class RenderResource
{ {
GPUDevice *device; GPUDevice *device;
ObjectMap<OSString,ShaderModule> shader_module_by_name; ObjectMap<AnsiString,ShaderModule> shader_module_by_name;
Map<OSString,Material *> material_by_name; Map<AnsiString,Material *> material_by_name;
Map<OSString,Texture *> texture_by_name; Map<OSString,Texture *> texture_by_name;
IDResManage<MaterialID, Material> rm_material; ///<材质合集 IDResManage<MaterialID, Material> rm_material; ///<材质合集
@ -95,7 +95,7 @@ public: // VBO/VAO
public: //Material public: //Material
const ShaderModule *CreateShaderModule(const OSString &filename,VkShaderStageFlagBits shader_stage,const uint32_t *spv_data,const size_t spv_size); const ShaderModule *CreateShaderModule(const AnsiString &shader_module_name,VkShaderStageFlagBits shader_stage,const uint32_t *spv_data,const size_t spv_size);
Material * CreateMaterial(const mtl::MaterialCreateInfo *); Material * CreateMaterial(const mtl::MaterialCreateInfo *);

View File

@ -12,32 +12,31 @@
#include<hgl/shadergen/ShaderDescriptorInfo.h> #include<hgl/shadergen/ShaderDescriptorInfo.h>
VK_NAMESPACE_BEGIN VK_NAMESPACE_BEGIN
const ShaderModule *RenderResource::CreateShaderModule(const OSString &filename,VkShaderStageFlagBits shader_stage,const uint32_t *spv_data,const size_t spv_size) const ShaderModule *RenderResource::CreateShaderModule(const AnsiString &sm_name,VkShaderStageFlagBits shader_stage,const uint32_t *spv_data,const size_t spv_size)
{ {
if(!device)return(nullptr); if(!device)return(nullptr);
if(filename.IsEmpty())return(nullptr); if(sm_name.IsEmpty())return(nullptr);
if(!spv_data)return(nullptr); if(!spv_data)return(nullptr);
if(spv_size<4)return(nullptr); if(spv_size<4)return(nullptr);
ShaderModule *sm; ShaderModule *sm;
if(shader_module_by_name.Get(filename,sm)) if(shader_module_by_name.Get(sm_name,sm))
return sm; return sm;
sm=device->CreateShaderModule(shader_stage,spv_data,spv_size); sm=device->CreateShaderModule(shader_stage,spv_data,spv_size);
shader_module_by_name.Add(filename,sm); shader_module_by_name.Add(sm_name,sm);
#ifdef _DEBUG #ifdef _DEBUG
{ {
auto da=device->GetDeviceAttribute(); auto da=device->GetDeviceAttribute();
const UTF8String sn=ToUTF8String(filename);
if(da->debug_maker) if(da->debug_maker)
da->debug_maker->SetShaderModule(*sm,sn); da->debug_maker->SetShaderModule(*sm,sm_name);
if(da->debug_utils) if(da->debug_utils)
da->debug_utils->SetShaderModule(*sm,sn); da->debug_utils->SetShaderModule(*sm,sm_name);
} }
#endif//_DEBUG #endif//_DEBUG
@ -51,7 +50,7 @@ Material *RenderResource::CreateMaterial(const mtl::MaterialCreateInfo *mci)
Material *mtl; Material *mtl;
const OSString mtl_name=ToOSString(mci->GetName()); const AnsiString mtl_name=mci->GetName();
if(material_by_name.Get(mtl_name,mtl)) if(material_by_name.Get(mtl_name,mtl))
return mtl; return mtl;
@ -66,7 +65,7 @@ Material *RenderResource::CreateMaterial(const mtl::MaterialCreateInfo *mci)
if(vert) if(vert)
{ {
sm=CreateShaderModule( mtl_name+OS_TEXT("?Vertex"), sm=CreateShaderModule( mtl_name+U8_TEXT("?Vertex"),
VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_VERTEX_BIT,
vert->GetSPVData(),vert->GetSPVSize()); vert->GetSPVData(),vert->GetSPVSize());
@ -81,7 +80,7 @@ Material *RenderResource::CreateMaterial(const mtl::MaterialCreateInfo *mci)
if(geom) if(geom)
{ {
sm=CreateShaderModule( mtl_name+OS_TEXT("?Geometry"), sm=CreateShaderModule( mtl_name+U8_TEXT("?Geometry"),
VK_SHADER_STAGE_GEOMETRY_BIT, VK_SHADER_STAGE_GEOMETRY_BIT,
geom->GetSPVData(),geom->GetSPVSize()); geom->GetSPVData(),geom->GetSPVSize());
@ -92,7 +91,7 @@ Material *RenderResource::CreateMaterial(const mtl::MaterialCreateInfo *mci)
if(frag) if(frag)
{ {
sm=CreateShaderModule( mtl_name+OS_TEXT("?Fragment"), sm=CreateShaderModule( mtl_name+U8_TEXT("?Fragment"),
VK_SHADER_STAGE_FRAGMENT_BIT, VK_SHADER_STAGE_FRAGMENT_BIT,
frag->GetSPVData(),frag->GetSPVSize()); frag->GetSPVData(),frag->GetSPVSize());