new function, MaterialFileData load UBO OK! to make shader OK.
This commit is contained in:
parent
f0848541c2
commit
4fafd938b1
2
CMCore
2
CMCore
@ -1 +1 @@
|
|||||||
Subproject commit 924f4ab9f358d9701fbe9266a18f50903cff1571
|
Subproject commit 15baf1ecbde9ab8a3e299f8cc6dc02231f994917
|
@ -1 +1 @@
|
|||||||
Subproject commit 679c9d4eccdc34e7add4da42d82dfb3e795c5600
|
Subproject commit 6dbe730bb8a12a83095596e2c6f71ddb6e41a71a
|
@ -12,8 +12,10 @@ define HAVE_SPECULAR off //默认不定义HAVE_SPECULAR
|
|||||||
UBO
|
UBO
|
||||||
{
|
{
|
||||||
File BlinnPhongSun.ubo //文件名,如果/开头表示从ShaderLibrary根目录开始,没有则表示同一目录
|
File BlinnPhongSun.ubo //文件名,如果/开头表示从ShaderLibrary根目录开始,没有则表示同一目录
|
||||||
|
Struct BlinnPhongSun //结构名称
|
||||||
Name sun //在代码中的变量名
|
Name sun //在代码中的变量名
|
||||||
Stage Vertex,Fragment //会引用的shader
|
Stage Vertex,Fragment //会引用的shader
|
||||||
|
Set Global //Descriptor Set
|
||||||
}
|
}
|
||||||
|
|
||||||
#MaterialInstance
|
#MaterialInstance
|
||||||
|
@ -4,6 +4,8 @@
|
|||||||
|
|
||||||
STD_MTL_NAMESPACE_BEGIN
|
STD_MTL_NAMESPACE_BEGIN
|
||||||
|
|
||||||
|
const char *GetUBOCodes(const AccumMemoryManager::Block *block);
|
||||||
|
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
class Std2DMaterialLoader:public Std2DMaterial
|
class Std2DMaterialLoader:public Std2DMaterial
|
||||||
@ -36,6 +38,18 @@ namespace
|
|||||||
mfd->mi.shader_stage_flag_bits);
|
mfd->mi.shader_stage_flag_bits);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for(const auto ubo:mfd->ubo_list)
|
||||||
|
{
|
||||||
|
const char *ubo_codes=GetUBOCodes(ubo.block);
|
||||||
|
|
||||||
|
mci->AddStruct(ubo.struct_name,ubo_codes);
|
||||||
|
|
||||||
|
mci->AddUBO(ubo.shader_stage_flag_bits,
|
||||||
|
ubo.set,
|
||||||
|
ubo.struct_name,
|
||||||
|
ubo.name);
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4,12 +4,17 @@
|
|||||||
|
|
||||||
STD_MTL_NAMESPACE_BEGIN
|
STD_MTL_NAMESPACE_BEGIN
|
||||||
|
|
||||||
|
const char *GetUBOCodes(const AccumMemoryManager::Block *block);
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
class Std3DMaterialLoader : public Std3DMaterial {
|
class Std3DMaterialLoader : public Std3DMaterial
|
||||||
|
{
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
material_file::MaterialFileData *mfd;
|
material_file::MaterialFileData *mfd;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
Std3DMaterialLoader(material_file::MaterialFileData* data, const Material3DCreateConfig* cfg)
|
Std3DMaterialLoader(material_file::MaterialFileData* data, const Material3DCreateConfig* cfg)
|
||||||
: Std3DMaterial(cfg)
|
: Std3DMaterial(cfg)
|
||||||
{
|
{
|
||||||
@ -26,7 +31,20 @@ public:
|
|||||||
if (!Std3DMaterial::BeginCustomShader())
|
if (!Std3DMaterial::BeginCustomShader())
|
||||||
return (false);
|
return (false);
|
||||||
|
|
||||||
if (mfd->mi.mi_bytes > 0) {
|
for(const auto ubo:mfd->ubo_list)
|
||||||
|
{
|
||||||
|
const char *ubo_codes=GetUBOCodes(ubo.block);
|
||||||
|
|
||||||
|
mci->AddStruct(ubo.struct_name,ubo_codes);
|
||||||
|
|
||||||
|
mci->AddUBO(ubo.shader_stage_flag_bits,
|
||||||
|
ubo.set,
|
||||||
|
ubo.struct_name,
|
||||||
|
ubo.name);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mfd->mi.mi_bytes > 0)
|
||||||
|
{
|
||||||
mci->SetMaterialInstance( mfd->mi.code,
|
mci->SetMaterialInstance( mfd->mi.code,
|
||||||
mfd->mi.mi_bytes,
|
mfd->mi.mi_bytes,
|
||||||
mfd->mi.shader_stage_flag_bits);
|
mfd->mi.shader_stage_flag_bits);
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
#include<hgl/graph/VKShaderStage.h>
|
#include<hgl/graph/VKShaderStage.h>
|
||||||
#include<hgl/graph/VKSamplerType.h>
|
#include<hgl/graph/VKSamplerType.h>
|
||||||
#include<hgl/graph/VKPrimitiveType.h>
|
#include<hgl/graph/VKPrimitiveType.h>
|
||||||
|
#include<hgl/graph/VKDescriptorSetType.h>
|
||||||
|
|
||||||
namespace material_file
|
namespace material_file
|
||||||
{
|
{
|
||||||
@ -37,12 +38,15 @@ namespace material_file
|
|||||||
|
|
||||||
struct UBOData
|
struct UBOData
|
||||||
{
|
{
|
||||||
|
char struct_name[SHADER_RESOURCE_NAME_MAX_LENGTH];
|
||||||
char name[SHADER_RESOURCE_NAME_MAX_LENGTH];
|
char name[SHADER_RESOURCE_NAME_MAX_LENGTH];
|
||||||
|
|
||||||
char filename[HGL_MAX_PATH];
|
char filename[HGL_MAX_PATH];
|
||||||
|
|
||||||
uint32_t shader_stage_flag_bits;
|
uint32_t shader_stage_flag_bits;
|
||||||
|
|
||||||
|
hgl::graph::DescriptorSetType set;
|
||||||
|
|
||||||
AccumMemoryManager::Block *block;
|
AccumMemoryManager::Block *block;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -153,6 +153,11 @@ namespace
|
|||||||
ClipFilename(ubo_data.filename,sizeof(ubo_data.filename),text+5);
|
ClipFilename(ubo_data.filename,sizeof(ubo_data.filename),text+5);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
if(hgl::stricmp(text,"Struct ",7)==0)
|
||||||
|
{
|
||||||
|
ClipCodeString(ubo_data.struct_name,sizeof(ubo_data.struct_name),text+7);
|
||||||
|
}
|
||||||
|
else
|
||||||
if(hgl::stricmp(text,"Name ",5)==0)
|
if(hgl::stricmp(text,"Name ",5)==0)
|
||||||
{
|
{
|
||||||
ClipCodeString(ubo_data.name,sizeof(ubo_data.name),text+5);
|
ClipCodeString(ubo_data.name,sizeof(ubo_data.name),text+5);
|
||||||
@ -162,6 +167,15 @@ namespace
|
|||||||
{
|
{
|
||||||
ubo_data.shader_stage_flag_bits=ShaderStageParse(text+6,text+len);
|
ubo_data.shader_stage_flag_bits=ShaderStageParse(text+6,text+len);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
if(hgl::stricmp(text,"Set ",4)==0)
|
||||||
|
{
|
||||||
|
char set_name[32];
|
||||||
|
|
||||||
|
ClipCodeString(set_name,sizeof(set_name),text+4);
|
||||||
|
|
||||||
|
ubo_data.set=GetDescriptorSetType(set_name);
|
||||||
|
}
|
||||||
|
|
||||||
return(false);
|
return(false);
|
||||||
}
|
}
|
||||||
@ -662,6 +676,13 @@ namespace
|
|||||||
|
|
||||||
ptr[size]=0;
|
ptr[size]=0;
|
||||||
|
|
||||||
|
ptr+=size-1;
|
||||||
|
while(*ptr=='\r'||*ptr=='\n')
|
||||||
|
{
|
||||||
|
*ptr=0;
|
||||||
|
--ptr;
|
||||||
|
}
|
||||||
|
|
||||||
ubo_codes_map.Add(filename,block);
|
ubo_codes_map.Add(filename,block);
|
||||||
|
|
||||||
return block;
|
return block;
|
||||||
@ -717,6 +738,12 @@ MaterialFileData *LoadMaterialDataFromFile(const AnsiString &mtl_filename)
|
|||||||
ubo_os_full_filename=filesystem::MergeFilename(mtl_path,ubo_os_fn);
|
ubo_os_full_filename=filesystem::MergeFilename(mtl_path,ubo_os_fn);
|
||||||
|
|
||||||
ud.block=LoadUBO2Block(ubo_os_full_filename);
|
ud.block=LoadUBO2Block(ubo_os_full_filename);
|
||||||
|
|
||||||
|
if(!ud.block)
|
||||||
|
{
|
||||||
|
delete mfd;
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return mfd;
|
return mfd;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user