reanmed to ShaderAttribute instead of ShaderStage
This commit is contained in:
Submodule CMSceneGraph updated: 6e30c0c2ca...3d5c287da5
@@ -73,7 +73,7 @@ class Semaphore;
|
|||||||
struct PipelineLayoutData;
|
struct PipelineLayoutData;
|
||||||
class DescriptorSet;
|
class DescriptorSet;
|
||||||
|
|
||||||
struct ShaderStage;
|
struct ShaderAttribute;
|
||||||
|
|
||||||
class ShaderResource;
|
class ShaderResource;
|
||||||
class ShaderModule;
|
class ShaderModule;
|
||||||
|
@@ -60,7 +60,7 @@ class VertexShaderModule:public ShaderModule
|
|||||||
uint32_t attr_count;
|
uint32_t attr_count;
|
||||||
VAT *type_list;
|
VAT *type_list;
|
||||||
const char **name_list;
|
const char **name_list;
|
||||||
ShaderStage **ssi_list;
|
ShaderAttribute **ssi_list;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
@@ -75,9 +75,9 @@ public:
|
|||||||
* 获取输入流绑定点,需要注意的时,这里获取的binding并非是shader中的binding/location,而是绑定顺序的序列号。对应vkCmdBindVertexBuffer的缓冲区序列号
|
* 获取输入流绑定点,需要注意的时,这里获取的binding并非是shader中的binding/location,而是绑定顺序的序列号。对应vkCmdBindVertexBuffer的缓冲区序列号
|
||||||
*/
|
*/
|
||||||
const int GetStageInputBinding(const AnsiString &name)const{return shader_resource->GetStageInputBinding(name);}
|
const int GetStageInputBinding(const AnsiString &name)const{return shader_resource->GetStageInputBinding(name);}
|
||||||
const ShaderStage * GetStageInput (const AnsiString &name)const{return shader_resource->GetStageInput(name);}
|
const ShaderAttribute * GetStageInput (const AnsiString &name)const{return shader_resource->GetStageInput(name);}
|
||||||
const uint GetStageInputCount () const{return shader_resource->GetStageInputCount();}
|
const uint GetStageInputCount () const{return shader_resource->GetStageInputCount();}
|
||||||
const ShaderStageList & GetStageInputs () const{return shader_resource->GetStageInputs();}
|
const ShaderAttributeList & GetStageInputs () const{return shader_resource->GetStageInputs();}
|
||||||
|
|
||||||
//const uint32_t GetAttrCount()const{return attr_count;}
|
//const uint32_t GetAttrCount()const{return attr_count;}
|
||||||
|
|
||||||
|
@@ -16,27 +16,26 @@ class ShaderResource
|
|||||||
const void *spv_data;
|
const void *spv_data;
|
||||||
uint32 spv_size;
|
uint32 spv_size;
|
||||||
|
|
||||||
ShaderStageList stage_inputs;
|
ShaderStageIO stage_io;
|
||||||
// ShaderStageList stage_outputs;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
ShaderResource(const VkShaderStageFlagBits &,const void *,const uint32);
|
ShaderResource(const VkShaderStageFlagBits &,const void *,const uint32);
|
||||||
virtual ~ShaderResource()=default;
|
virtual ~ShaderResource()=default;
|
||||||
|
|
||||||
const VkShaderStageFlagBits GetStage ()const {return stage_flag;}
|
const VkShaderStageFlagBits GetStageFlagBit ()const {return stage_flag;}
|
||||||
const char * GetStageName ()const {return GetShaderStageName(stage_flag);}
|
const char * GetStageFlagName ()const {return GetShaderStageName(stage_flag);}
|
||||||
|
|
||||||
const uint32_t * GetCode ()const {return (uint32_t *)spv_data;}
|
const uint32_t * GetCode ()const {return (uint32_t *)spv_data;}
|
||||||
const uint32_t GetCodeSize ()const {return spv_size;}
|
const uint32_t GetCodeSize ()const {return spv_size;}
|
||||||
|
|
||||||
ShaderStageList & GetStageInputs () {return stage_inputs;}
|
ShaderAttributeList & GetStageInputs () {return stage_io.input;}
|
||||||
// ShaderStageList & GetStageOutputs () {return stage_outputs;}
|
// ShaderAttributeList & GetStageOutputs () {return stage_io.output;}
|
||||||
|
|
||||||
const uint GetStageInputCount ()const {return stage_inputs.GetCount();}
|
const uint GetStageInputCount ()const {return stage_io.input.GetCount();}
|
||||||
// const uint GetStageOutputCount ()const {return stage_outputs.GetCount();}
|
// const uint GetStageOutputCount ()const {return stage_io.output.GetCount();}
|
||||||
|
|
||||||
const ShaderStage * GetStageInput (const AnsiString &)const;
|
const ShaderAttribute * GetStageInput (const AnsiString &)const;
|
||||||
const int GetStageInputBinding(const AnsiString &)const;
|
const int GetStageInputBinding(const AnsiString &)const;
|
||||||
};//class ShaderResource
|
};//class ShaderResource
|
||||||
|
|
||||||
|
@@ -19,7 +19,7 @@ using SubpassInputDescriptorList=ObjectList<SubpassInputDescriptor>;
|
|||||||
*/
|
*/
|
||||||
class ShaderDescriptorInfo
|
class ShaderDescriptorInfo
|
||||||
{
|
{
|
||||||
VkShaderStageFlagBits shader_stage;
|
VkShaderStageFlagBits stage_flag;
|
||||||
|
|
||||||
ShaderStageIO stage_io;
|
ShaderStageIO stage_io;
|
||||||
|
|
||||||
@@ -39,8 +39,8 @@ public:
|
|||||||
ShaderDescriptorInfo(VkShaderStageFlagBits);
|
ShaderDescriptorInfo(VkShaderStageFlagBits);
|
||||||
~ShaderDescriptorInfo()=default;
|
~ShaderDescriptorInfo()=default;
|
||||||
|
|
||||||
const VkShaderStageFlagBits GetStageBits()const { return shader_stage; }
|
const VkShaderStageFlagBits GetStageFlag()const { return stage_flag; }
|
||||||
const AnsiString GetStageName()const { return AnsiString(GetShaderStageName(shader_stage)); }
|
const AnsiString GetStageName()const { return AnsiString(GetShaderStageName(stage_flag)); }
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
@@ -57,8 +57,8 @@ public:
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
bool AddInput(ShaderStage *);
|
bool AddInput(ShaderAttribute *);
|
||||||
bool AddOutput(ShaderStage *);
|
bool AddOutput(ShaderAttribute *);
|
||||||
|
|
||||||
bool AddUBO(DescriptorSetType type,const UBODescriptor *sd);
|
bool AddUBO(DescriptorSetType type,const UBODescriptor *sd);
|
||||||
bool AddSampler(DescriptorSetType type,const SamplerDescriptor *sd);
|
bool AddSampler(DescriptorSetType type,const SamplerDescriptor *sd);
|
||||||
|
@@ -139,7 +139,7 @@ Material *RenderResource::CreateMaterial(const OSString &filename)
|
|||||||
|
|
||||||
if(sr)
|
if(sr)
|
||||||
{
|
{
|
||||||
shader_name=filename+OS_TEXT("?")+ToOSString(sr->GetStageName());
|
shader_name=filename+OS_TEXT("?")+ToOSString(sr->GetStageFlagName());
|
||||||
|
|
||||||
sm=CreateShaderModule(shader_name,sr);
|
sm=CreateShaderModule(shader_name,sr);
|
||||||
|
|
||||||
|
@@ -7,7 +7,7 @@ ShaderModule *GPUDevice::CreateShaderModule(ShaderResource *sr)
|
|||||||
{
|
{
|
||||||
if(!sr)return(nullptr);
|
if(!sr)return(nullptr);
|
||||||
|
|
||||||
PipelineShaderStageCreateInfo *shader_stage=new PipelineShaderStageCreateInfo(sr->GetStage());
|
PipelineShaderStageCreateInfo *shader_stage=new PipelineShaderStageCreateInfo(sr->GetStageFlagBit());
|
||||||
|
|
||||||
ShaderModuleCreateInfo moduleCreateInfo(sr);
|
ShaderModuleCreateInfo moduleCreateInfo(sr);
|
||||||
|
|
||||||
@@ -16,7 +16,7 @@ ShaderModule *GPUDevice::CreateShaderModule(ShaderResource *sr)
|
|||||||
|
|
||||||
ShaderModule *sm;
|
ShaderModule *sm;
|
||||||
|
|
||||||
if(sr->GetStage()==VK_SHADER_STAGE_VERTEX_BIT)
|
if(sr->GetStageFlagBit()==VK_SHADER_STAGE_VERTEX_BIT)
|
||||||
sm=new VertexShaderModule(attr->device,shader_stage,sr);
|
sm=new VertexShaderModule(attr->device,shader_stage,sr);
|
||||||
else
|
else
|
||||||
sm=new ShaderModule(attr->device,shader_stage,sr);
|
sm=new ShaderModule(attr->device,shader_stage,sr);
|
||||||
@@ -44,7 +44,7 @@ ShaderModule::~ShaderModule()
|
|||||||
|
|
||||||
VertexShaderModule::VertexShaderModule(VkDevice dev,VkPipelineShaderStageCreateInfo *pssci,ShaderResource *sr):ShaderModule(dev,pssci,sr)
|
VertexShaderModule::VertexShaderModule(VkDevice dev,VkPipelineShaderStageCreateInfo *pssci,ShaderResource *sr):ShaderModule(dev,pssci,sr)
|
||||||
{
|
{
|
||||||
const ShaderStageList &stage_input_list=sr->GetStageInputs();
|
const ShaderAttributeList &stage_input_list=sr->GetStageInputs();
|
||||||
|
|
||||||
attr_count=stage_input_list.GetCount();
|
attr_count=stage_input_list.GetCount();
|
||||||
ssi_list=stage_input_list.GetData();
|
ssi_list=stage_input_list.GetData();
|
||||||
@@ -80,7 +80,7 @@ VIL *VertexShaderModule::CreateVIL(const VILConfig *cfg)
|
|||||||
VkVertexInputBindingDescription *bind=binding_list;
|
VkVertexInputBindingDescription *bind=binding_list;
|
||||||
VkVertexInputAttributeDescription *attr=attribute_list;
|
VkVertexInputAttributeDescription *attr=attribute_list;
|
||||||
|
|
||||||
ShaderStage **si=ssi_list;
|
ShaderAttribute **si=ssi_list;
|
||||||
VAConfig vac;
|
VAConfig vac;
|
||||||
|
|
||||||
for(uint i=0;i<attr_count;i++)
|
for(uint i=0;i<attr_count;i++)
|
||||||
|
@@ -10,7 +10,7 @@ VK_NAMESPACE_BEGIN
|
|||||||
{
|
{
|
||||||
ObjectMap<OSString,ShaderResource> shader_resource_by_filename;
|
ObjectMap<OSString,ShaderResource> shader_resource_by_filename;
|
||||||
|
|
||||||
const bool LoadShaderStages(ShaderStageList &ss_list,io::ConstBufferReader &cbr)
|
const bool LoadShaderStages(ShaderAttributeList &ss_list,io::ConstBufferReader &cbr)
|
||||||
{
|
{
|
||||||
uint count;
|
uint count;
|
||||||
|
|
||||||
@@ -19,11 +19,11 @@ VK_NAMESPACE_BEGIN
|
|||||||
if(count<=0)
|
if(count<=0)
|
||||||
return(false);
|
return(false);
|
||||||
|
|
||||||
ShaderStage *ss;
|
ShaderAttribute *ss;
|
||||||
|
|
||||||
for(uint i=0;i<count;i++)
|
for(uint i=0;i<count;i++)
|
||||||
{
|
{
|
||||||
ss=new ShaderStage;
|
ss=new ShaderAttribute;
|
||||||
|
|
||||||
cbr.Read(ss->location);
|
cbr.Read(ss->location);
|
||||||
cbr.CastRead<uint8>(ss->basetype);
|
cbr.CastRead<uint8>(ss->basetype);
|
||||||
@@ -45,10 +45,10 @@ VK_NAMESPACE_BEGIN
|
|||||||
spv_size=size;
|
spv_size=size;
|
||||||
}
|
}
|
||||||
|
|
||||||
const ShaderStage *ShaderResource::GetStageInput(const AnsiString &name) const
|
const ShaderAttribute *ShaderResource::GetStageInput(const AnsiString &name) const
|
||||||
{
|
{
|
||||||
const int count=stage_inputs.GetCount();
|
const int count=stage_io.input.GetCount();
|
||||||
ShaderStage **ss=stage_inputs.GetData();
|
ShaderAttribute **ss=stage_io.input.GetData();
|
||||||
|
|
||||||
for(int i=0;i<count;i++)
|
for(int i=0;i<count;i++)
|
||||||
{
|
{
|
||||||
@@ -63,8 +63,8 @@ VK_NAMESPACE_BEGIN
|
|||||||
|
|
||||||
const int ShaderResource::GetStageInputBinding(const AnsiString &name) const
|
const int ShaderResource::GetStageInputBinding(const AnsiString &name) const
|
||||||
{
|
{
|
||||||
const int count=stage_inputs.GetCount();
|
const int count=stage_io.input.GetCount();
|
||||||
ShaderStage **ss=stage_inputs.GetData();
|
ShaderAttribute **ss=stage_io.input.GetData();
|
||||||
|
|
||||||
for(int i=0;i<count;i++)
|
for(int i=0;i<count;i++)
|
||||||
{
|
{
|
||||||
|
@@ -37,8 +37,8 @@ SET(GLSL_COMPILER_SOURCE GLSLCompiler.h
|
|||||||
|
|
||||||
SOURCE_GROUP("GLSL Compiler" FILES ${GLSL_COMPILER_SOURCE})
|
SOURCE_GROUP("GLSL Compiler" FILES ${GLSL_COMPILER_SOURCE})
|
||||||
|
|
||||||
SOURCE_GROUP("Material Create Info\\Descriptor Manager" FILES ${SHADERGEN_HEADER_FILES}
|
SOURCE_GROUP("Material Create Info\\Descriptor Info" FILES ${SHADERGEN_HEADER_FILES}
|
||||||
${SHADERGEN_SOURCE_FILES})
|
${SHADERGEN_SOURCE_FILES})
|
||||||
|
|
||||||
SET(STANDARD_MATERIAL_SOURCE ${SHADERGEN_INCLUDE_PATH}/StandardMaterial.h
|
SET(STANDARD_MATERIAL_SOURCE ${SHADERGEN_INCLUDE_PATH}/StandardMaterial.h
|
||||||
StandardMaterial.cpp)
|
StandardMaterial.cpp)
|
||||||
|
@@ -37,7 +37,7 @@ namespace glsl_compiler
|
|||||||
|
|
||||||
constexpr size_t SHADER_RESOURCE_NAME_MAX_LENGTH=32;
|
constexpr size_t SHADER_RESOURCE_NAME_MAX_LENGTH=32;
|
||||||
|
|
||||||
struct ShaderStage
|
struct ShaderAttribute
|
||||||
{
|
{
|
||||||
char name[SHADER_RESOURCE_NAME_MAX_LENGTH];
|
char name[SHADER_RESOURCE_NAME_MAX_LENGTH];
|
||||||
uint8_t location;
|
uint8_t location;
|
||||||
@@ -48,7 +48,7 @@ namespace glsl_compiler
|
|||||||
struct ShaderStageData
|
struct ShaderStageData
|
||||||
{
|
{
|
||||||
uint32_t count;
|
uint32_t count;
|
||||||
ShaderStage *items;
|
ShaderAttribute *items;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Descriptor
|
struct Descriptor
|
||||||
|
@@ -17,7 +17,7 @@ ShaderCreateInfo::~ShaderCreateInfo()
|
|||||||
|
|
||||||
int ShaderCreateInfo::AddOutput(const VAT &type,const AnsiString &name)
|
int ShaderCreateInfo::AddOutput(const VAT &type,const AnsiString &name)
|
||||||
{
|
{
|
||||||
ShaderStage *ss=new ShaderStage;
|
ShaderAttribute *ss=new ShaderAttribute;
|
||||||
|
|
||||||
hgl::strcpy(ss->name,sizeof(ss->name),name.c_str());
|
hgl::strcpy(ss->name,sizeof(ss->name),name.c_str());
|
||||||
|
|
||||||
@@ -89,7 +89,7 @@ bool ShaderCreateInfo::ProcOutput()
|
|||||||
{
|
{
|
||||||
output_struct.Clear();
|
output_struct.Clear();
|
||||||
|
|
||||||
const ShaderStageList &ssl=sdm->GetShaderStageIO().output;
|
const ShaderAttributeList &ssl=sdm->GetShaderStageIO().output;
|
||||||
|
|
||||||
if(ssl.GetCount()<=0)return(true);
|
if(ssl.GetCount()<=0)return(true);
|
||||||
|
|
||||||
@@ -99,7 +99,7 @@ bool ShaderCreateInfo::ProcOutput()
|
|||||||
for(auto *ss:ssl)
|
for(auto *ss:ssl)
|
||||||
{
|
{
|
||||||
output_struct+="\t";
|
output_struct+="\t";
|
||||||
output_struct+=GetShaderStageTypeName(ss);
|
output_struct+=GetShaderAttributeTypename(ss);
|
||||||
output_struct+=" ";
|
output_struct+=" ";
|
||||||
output_struct+=ss->name;
|
output_struct+=ss->name;
|
||||||
output_struct+=";\n";
|
output_struct+=";\n";
|
||||||
|
@@ -12,7 +12,7 @@ void ShaderCreateInfoFragment::UseDefaultMain()
|
|||||||
const auto &output_list=sdm->GetShaderStageIO().output;
|
const auto &output_list=sdm->GetShaderStageIO().output;
|
||||||
|
|
||||||
const uint count=output_list.GetCount();
|
const uint count=output_list.GetCount();
|
||||||
ShaderStage **o=output_list.GetData();
|
ShaderAttribute **o=output_list.GetData();
|
||||||
|
|
||||||
for(uint i=0;i<count;i++)
|
for(uint i=0;i<count;i++)
|
||||||
{
|
{
|
||||||
@@ -33,14 +33,14 @@ bool ShaderCreateInfoFragment::ProcOutput()
|
|||||||
const auto &output_list=sdm->GetShaderStageIO().output;
|
const auto &output_list=sdm->GetShaderStageIO().output;
|
||||||
|
|
||||||
const uint count=output_list.GetCount();
|
const uint count=output_list.GetCount();
|
||||||
ShaderStage **o=output_list.GetData();
|
ShaderAttribute **o=output_list.GetData();
|
||||||
|
|
||||||
for(uint i=0;i<count;i++)
|
for(uint i=0;i<count;i++)
|
||||||
{
|
{
|
||||||
final_shader+="layout(location=";
|
final_shader+="layout(location=";
|
||||||
final_shader+=AnsiString::numberOf(i);
|
final_shader+=AnsiString::numberOf(i);
|
||||||
final_shader+=") out ";
|
final_shader+=") out ";
|
||||||
final_shader+=GetShaderStageTypeName(*o);
|
final_shader+=GetShaderAttributeTypename(*o);
|
||||||
final_shader+=" ";
|
final_shader+=" ";
|
||||||
final_shader+=(*o)->name;
|
final_shader+=(*o)->name;
|
||||||
final_shader+=";\n";
|
final_shader+=";\n";
|
||||||
|
@@ -10,7 +10,7 @@ using namespace hgl::graph;
|
|||||||
|
|
||||||
int ShaderCreateInfoVertex::AddInput(const VAT &type,const AnsiString &name)
|
int ShaderCreateInfoVertex::AddInput(const VAT &type,const AnsiString &name)
|
||||||
{
|
{
|
||||||
ShaderStage *ss=new ShaderStage;
|
ShaderAttribute *ss=new ShaderAttribute;
|
||||||
|
|
||||||
hgl::strcpy(ss->name,sizeof(ss->name),name.c_str());
|
hgl::strcpy(ss->name,sizeof(ss->name),name.c_str());
|
||||||
|
|
||||||
@@ -48,10 +48,10 @@ bool ShaderCreateInfoVertex::ProcInput(ShaderCreateInfo *)
|
|||||||
for(auto *ss:input)
|
for(auto *ss:input)
|
||||||
{
|
{
|
||||||
final_shader+="layout(location=";
|
final_shader+="layout(location=";
|
||||||
final_shader+=UTF8String::numberOf(ss->location);
|
final_shader+=AnsiString::numberOf(ss->location);
|
||||||
final_shader+=") in ";
|
final_shader+=") in ";
|
||||||
final_shader+=UTF8String(GetShaderStageTypeName(ss));
|
final_shader+=GetShaderAttributeTypename(ss);
|
||||||
final_shader+=" "+UTF8String(ss->name);
|
final_shader+=" "+AnsiString(ss->name);
|
||||||
final_shader+=";\n";
|
final_shader+=";\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -3,14 +3,14 @@
|
|||||||
SHADERGEN_NAMESPACE_BEGIN
|
SHADERGEN_NAMESPACE_BEGIN
|
||||||
ShaderDescriptorInfo::ShaderDescriptorInfo(VkShaderStageFlagBits flag_bit)
|
ShaderDescriptorInfo::ShaderDescriptorInfo(VkShaderStageFlagBits flag_bit)
|
||||||
{
|
{
|
||||||
shader_stage=flag_bit;
|
stage_flag=flag_bit;
|
||||||
|
|
||||||
hgl_zero(push_constant);
|
hgl_zero(push_constant);
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
bool Find(ObjectList<ShaderStage> &ol,const ShaderStage *ss)
|
bool Find(ObjectList<ShaderAttribute> &ol,const ShaderAttribute *ss)
|
||||||
{
|
{
|
||||||
for(int i=0;i<ol.GetCount();i++)
|
for(int i=0;i<ol.GetCount();i++)
|
||||||
if(hgl::strcmp(ol[i]->name,ss->name)==0)
|
if(hgl::strcmp(ol[i]->name,ss->name)==0)
|
||||||
@@ -20,7 +20,7 @@ namespace
|
|||||||
}
|
}
|
||||||
}//namespace
|
}//namespace
|
||||||
|
|
||||||
bool ShaderDescriptorInfo::AddInput(ShaderStage *ss)
|
bool ShaderDescriptorInfo::AddInput(ShaderAttribute *ss)
|
||||||
{
|
{
|
||||||
if(!ss)return(false);
|
if(!ss)return(false);
|
||||||
|
|
||||||
@@ -31,7 +31,7 @@ bool ShaderDescriptorInfo::AddInput(ShaderStage *ss)
|
|||||||
return(true);
|
return(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ShaderDescriptorInfo::AddOutput(ShaderStage *ss)
|
bool ShaderDescriptorInfo::AddOutput(ShaderAttribute *ss)
|
||||||
{
|
{
|
||||||
if(!ss)return(false);
|
if(!ss)return(false);
|
||||||
|
|
||||||
@@ -110,7 +110,7 @@ void ShaderDescriptorInfo::DebugOutput(int index)
|
|||||||
LOG_INFO("\tStage Input "+UTF8String::numberOf(stage_io.input.GetCount()));
|
LOG_INFO("\tStage Input "+UTF8String::numberOf(stage_io.input.GetCount()));
|
||||||
|
|
||||||
for(auto *ss:stage_io.input)
|
for(auto *ss:stage_io.input)
|
||||||
LOG_INFO("\t\tlayout(location="+UTF8String::numberOf(ss->location)+") in "+UTF8String(GetShaderStageTypeName(ss))+"\t"+UTF8String(ss->name));
|
LOG_INFO("\t\tlayout(location="+UTF8String::numberOf(ss->location)+") in "+GetShaderAttributeTypename(ss)+"\t"+UTF8String(ss->name));
|
||||||
}
|
}
|
||||||
|
|
||||||
if(stage_io.output.GetCount()>0)
|
if(stage_io.output.GetCount()>0)
|
||||||
@@ -118,7 +118,7 @@ void ShaderDescriptorInfo::DebugOutput(int index)
|
|||||||
LOG_INFO("\tStage Output "+UTF8String::numberOf(stage_io.output.GetCount()));
|
LOG_INFO("\tStage Output "+UTF8String::numberOf(stage_io.output.GetCount()));
|
||||||
|
|
||||||
for(auto *ss:stage_io.output)
|
for(auto *ss:stage_io.output)
|
||||||
LOG_INFO("\t\tlayout(location="+UTF8String::numberOf(ss->location)+") out "+UTF8String(GetShaderStageTypeName(ss))+"\t"+UTF8String(ss->name));
|
LOG_INFO("\t\tlayout(location="+UTF8String::numberOf(ss->location)+") out "+GetShaderAttributeTypename(ss)+"\t"+UTF8String(ss->name));
|
||||||
}
|
}
|
||||||
|
|
||||||
if(ubo_list.GetCount()>0)
|
if(ubo_list.GetCount()>0)
|
||||||
|
Reference in New Issue
Block a user