1.removed VertexShaderModule
2.added VertexInput at MaterialData 3.newly CreateShaderModule/CreateMaterial functions at GPUDevice/RenderResource class.
This commit is contained in:
parent
42f63c5ef1
commit
facdec5556
@ -1 +1 @@
|
||||
Subproject commit f51a6a98d6268e93fe854a2c3a07e559778c3e54
|
||||
Subproject commit 4a7af92ac66d55d1e6bf3d7e384ab92797e0559a
|
@ -6,6 +6,7 @@
|
||||
#include<hgl/math/HalfFloat.h>
|
||||
#include<hgl/filesystem/FileSystem.h>
|
||||
#include<hgl/graph/SceneInfo.h>
|
||||
#include<hgl/graph/VKVertexInputConfig.h>
|
||||
#include<hgl/graph/VKRenderablePrimitiveCreater.h>
|
||||
|
||||
using namespace hgl;
|
||||
|
@ -75,7 +75,6 @@ struct ShaderAttribute;
|
||||
|
||||
class ShaderResource;
|
||||
class ShaderModule;
|
||||
class VertexShaderModule;
|
||||
class ShaderModuleMap;
|
||||
class MaterialDescriptorSets;
|
||||
|
||||
@ -86,39 +85,9 @@ struct PipelineData;
|
||||
enum class InlinePipeline;
|
||||
class Pipeline;
|
||||
|
||||
struct VAConfig
|
||||
{
|
||||
VkFormat format;
|
||||
bool instance;
|
||||
|
||||
public:
|
||||
|
||||
VAConfig()
|
||||
{
|
||||
format=PF_UNDEFINED;
|
||||
instance=false;
|
||||
}
|
||||
|
||||
VAConfig(const VkFormat fmt,bool inst=false)
|
||||
{
|
||||
format=fmt;
|
||||
instance=inst;
|
||||
}
|
||||
|
||||
CompOperatorMemcmp(const VAConfig &);
|
||||
};
|
||||
|
||||
class VILConfig:public Map<AnsiString,VAConfig>
|
||||
{
|
||||
public:
|
||||
|
||||
using Map<AnsiString,VAConfig>::Map;
|
||||
|
||||
bool Add(const AnsiString &name,const VkFormat fmt,const bool inst=false)
|
||||
{
|
||||
return Map<AnsiString,VAConfig>::Add(name,VAConfig(fmt,inst));
|
||||
}
|
||||
};
|
||||
struct VAConfig;
|
||||
class VILConfig;
|
||||
class VertexInput;
|
||||
|
||||
class VertexInputLayout;
|
||||
using VIL=VertexInputLayout;
|
||||
|
@ -224,11 +224,9 @@ public: //shader & material
|
||||
MaterialParameters *CreateMP(const MaterialDescriptorSets *,const PipelineLayoutData *,const DescriptorSetType &);
|
||||
MaterialParameters *CreateMP(Material *,const DescriptorSetType &);
|
||||
|
||||
ShaderModule *CreateShaderModule(ShaderResource *);
|
||||
ShaderModule *CreateShaderModule(VkShaderStageFlagBits,const void *,const size_t);
|
||||
|
||||
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 *);
|
||||
Material *CreateMaterial(const UTF8String &mtl_name,ShaderModuleMap *shader_maps,MaterialDescriptorSets *,VertexInput *);
|
||||
|
||||
MaterialInstance *CreateMI(Material *,const VILConfig *vil_cfg=nullptr);
|
||||
|
||||
|
@ -15,10 +15,11 @@ struct MaterialData
|
||||
{
|
||||
UTF8String name;
|
||||
|
||||
ShaderModuleMap *shader_maps;
|
||||
MaterialDescriptorSets *mds;
|
||||
VertexInput *vertex_input;
|
||||
|
||||
VertexShaderModule *vertex_sm;
|
||||
ShaderModuleMap *shader_maps;
|
||||
|
||||
MaterialDescriptorSets *mds;
|
||||
|
||||
ShaderStageCreateInfoList shader_stage_list;
|
||||
|
||||
@ -54,7 +55,7 @@ public:
|
||||
|
||||
const UTF8String & GetName ()const{return data->name;}
|
||||
|
||||
VertexShaderModule * GetVertexShaderModule () {return data->vertex_sm;}
|
||||
const VertexInput * GetVertexInput ()const{return data->vertex_input;}
|
||||
|
||||
const ShaderStageCreateInfoList & GetStageList ()const{return data->shader_stage_list;}
|
||||
|
||||
@ -72,6 +73,10 @@ public:
|
||||
}
|
||||
|
||||
const bool hasSet (const DescriptorSetType &type)const;
|
||||
|
||||
VIL * CreateVIL(const VILConfig *format_map=nullptr);
|
||||
bool Release(VIL *);
|
||||
const uint GetVILCount();
|
||||
};//class Material
|
||||
VK_NAMESPACE_END
|
||||
#endif//HGL_GRAPH_VULKAN_MATERIAL_INCLUDE
|
||||
|
@ -88,7 +88,7 @@ public: // VBO/VAO
|
||||
|
||||
public: //Material
|
||||
|
||||
const ShaderModule *CreateShaderModule(const OSString &filename,ShaderResource *shader_resource);
|
||||
const ShaderModule *CreateShaderModule(const OSString &filename,VkShaderStageFlagBits shader_stage,const void *spv_data,const size_t spv_size);
|
||||
|
||||
Material * CreateMaterial(const OSString &);
|
||||
Material * CreateMaterial(const hgl::shadergen::MaterialCreateInfo *);
|
||||
|
@ -2,7 +2,6 @@
|
||||
#define HGL_GRAPH_VULKAN_SHADER_MODULE_INCLUDE
|
||||
|
||||
#include<hgl/graph/VK.h>
|
||||
#include<hgl/graph/VKShaderResource.h>
|
||||
#include<hgl/graph/VKVertexInputLayout.h>
|
||||
#include<hgl/type/SortedSets.h>
|
||||
|
||||
@ -21,13 +20,9 @@ private:
|
||||
|
||||
VkPipelineShaderStageCreateInfo *stage_create_info;
|
||||
|
||||
protected:
|
||||
|
||||
ShaderResource *shader_resource;
|
||||
|
||||
public:
|
||||
|
||||
ShaderModule(VkDevice dev,VkPipelineShaderStageCreateInfo *pssci,ShaderResource *);
|
||||
ShaderModule(VkDevice dev,VkPipelineShaderStageCreateInfo *pssci);
|
||||
virtual ~ShaderModule();
|
||||
|
||||
const int IncRef(){return ++ref_count;}
|
||||
@ -50,48 +45,5 @@ public:
|
||||
|
||||
operator VkShaderModule ()const{return stage_create_info->module;}
|
||||
};//class ShaderModule
|
||||
|
||||
/**
|
||||
* 顶点Shader模块<br>
|
||||
* 由于顶点shader在最前方执行,所以它比其它shader多了VertexInput的数据
|
||||
*/
|
||||
class VertexShaderModule:public ShaderModule
|
||||
{
|
||||
uint32_t attr_count;
|
||||
VAT *type_list;
|
||||
const char **name_list;
|
||||
ShaderAttribute *shader_attr_list;
|
||||
|
||||
private:
|
||||
|
||||
SortedSets<VIL *> vil_sets;
|
||||
|
||||
public:
|
||||
|
||||
VertexShaderModule(VkDevice dev,VkPipelineShaderStageCreateInfo *pssci,ShaderResource *sr);
|
||||
virtual ~VertexShaderModule();
|
||||
|
||||
/**
|
||||
* 获取输入流绑定点,需要注意的时,这里获取的binding并非是shader中的binding/location,而是绑定顺序的序列号。对应vkCmdBindVertexBuffer的缓冲区序列号
|
||||
*/
|
||||
const int GetInputBinding(const AnsiString &name)const{return shader_resource->GetInputBinding(name);}
|
||||
const ShaderAttribute * GetInput (const AnsiString &name)const{return shader_resource->GetInput(name);}
|
||||
const uint GetInputCount () const{return shader_resource->GetInputCount();}
|
||||
const ShaderAttributeArray & GetInputs () const{return shader_resource->GetInputs();}
|
||||
|
||||
//const uint32_t GetAttrCount()const{return attr_count;}
|
||||
|
||||
//const VkVertexInputBindingDescription * GetBindList ()const{return binding_list;}
|
||||
//const VkVertexInputAttributeDescription * GetAttrList ()const{return attribute_list;}
|
||||
|
||||
//const VkVertexInputBindingDescription * GetBind (const uint32_t index)const{return (index>=attr_count?nullptr:binding_list+index);}
|
||||
//const VkVertexInputAttributeDescription * GetAttr (const uint32_t index)const{return (index>=attr_count?nullptr:attribute_list+index);}
|
||||
|
||||
public:
|
||||
|
||||
VIL * CreateVIL(const VILConfig *format_map=nullptr);
|
||||
bool Release(VIL *);
|
||||
const uint32_t GetInstanceCount()const{return vil_sets.GetCount();}
|
||||
};//class VertexShaderModule:public ShaderModule
|
||||
VK_NAMESPACE_END
|
||||
#endif//HGL_GRAPH_VULKAN_SHADER_MODULE_INCLUDE
|
||||
|
@ -38,16 +38,5 @@ public:
|
||||
const ShaderAttribute * GetInput (const AnsiString &)const;
|
||||
const int GetInputBinding (const AnsiString &)const;
|
||||
};//class ShaderResource
|
||||
|
||||
struct ShaderModuleCreateInfo:public vkstruct_flag<VkShaderModuleCreateInfo,VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO>
|
||||
{
|
||||
public:
|
||||
|
||||
ShaderModuleCreateInfo(ShaderResource *sr)
|
||||
{
|
||||
codeSize=sr->GetCodeSize();
|
||||
pCode =sr->GetCode();
|
||||
}
|
||||
};//struct ShaderModuleCreateInfo
|
||||
VK_NAMESPACE_END
|
||||
#endif//HGL_GRAPH_VULKAN_SHADER_RESOURCE_INCLUDE
|
||||
|
@ -77,16 +77,11 @@ void CreateShaderStageList(List<VkPipelineShaderStageCreateInfo> &shader_stage_l
|
||||
}
|
||||
}
|
||||
|
||||
Material *GPUDevice::CreateMaterial(const UTF8String &mtl_name,ShaderModuleMap *shader_maps,MaterialDescriptorSets *mds)
|
||||
Material *GPUDevice::CreateMaterial(const UTF8String &mtl_name,ShaderModuleMap *shader_maps,MaterialDescriptorSets *mds,VertexInput *vi)
|
||||
{
|
||||
const int shader_count=shader_maps->GetCount();
|
||||
|
||||
if(shader_count<2)
|
||||
return(nullptr);
|
||||
|
||||
const ShaderModule *vsm;
|
||||
|
||||
if(!shader_maps->Get(VK_SHADER_STAGE_VERTEX_BIT,vsm))
|
||||
if(shader_count<1)
|
||||
return(nullptr);
|
||||
|
||||
PipelineLayoutData *pld=CreatePipelineLayoutData(mds);
|
||||
@ -103,7 +98,7 @@ Material *GPUDevice::CreateMaterial(const UTF8String &mtl_name,ShaderModuleMap *
|
||||
data->name =mtl_name;
|
||||
data->shader_maps =shader_maps;
|
||||
data->mds =mds;
|
||||
data->vertex_sm =(VertexShaderModule *)vsm;
|
||||
data->vertex_input =vi;
|
||||
|
||||
CreateShaderStageList(data->shader_stage_list,shader_maps);
|
||||
|
||||
@ -124,40 +119,4 @@ Material *GPUDevice::CreateMaterial(const UTF8String &mtl_name,ShaderModuleMap *
|
||||
|
||||
return(new Material(data));
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
if(!vertex_shader_module->IsVertex())return(nullptr);
|
||||
if(!fragment_shader_module->IsFragment())return(nullptr);
|
||||
|
||||
ShaderModuleMap *smm=new ShaderModuleMap;
|
||||
|
||||
smm->Add(vertex_shader_module);
|
||||
smm->Add(fragment_shader_module);
|
||||
|
||||
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,MaterialDescriptorSets *mds)
|
||||
{
|
||||
if(!vertex_shader_module
|
||||
||!geometry_shader_module
|
||||
||!fragment_shader_module)
|
||||
return(nullptr);
|
||||
|
||||
if(!vertex_shader_module->IsVertex())return(nullptr);
|
||||
if(!geometry_shader_module->IsGeometry())return(nullptr);
|
||||
if(!fragment_shader_module->IsFragment())return(nullptr);
|
||||
|
||||
ShaderModuleMap *smm=new ShaderModuleMap;
|
||||
|
||||
smm->Add(vertex_shader_module);
|
||||
smm->Add(geometry_shader_module);
|
||||
smm->Add(fragment_shader_module);
|
||||
|
||||
return CreateMaterial(mtl_name,smm,mds);
|
||||
}
|
||||
VK_NAMESPACE_END
|
||||
|
@ -1,6 +1,7 @@
|
||||
#include<hgl/graph/VKMaterial.h>
|
||||
#include<hgl/graph/VKMaterialParameters.h>
|
||||
#include<hgl/graph/VKMaterialDescriptorSets.h>
|
||||
#include<hgl/graph/VKVertexInput.h>
|
||||
#include"VKPipelineLayoutData.h"
|
||||
VK_NAMESPACE_BEGIN
|
||||
MaterialData::~MaterialData()
|
||||
@ -11,6 +12,8 @@ MaterialData::~MaterialData()
|
||||
|
||||
delete shader_maps;
|
||||
SAFE_CLEAR(mds);
|
||||
|
||||
delete vertex_input;
|
||||
}
|
||||
|
||||
Material::~Material()
|
||||
@ -28,4 +31,19 @@ const bool Material::hasSet(const DescriptorSetType &dst)const
|
||||
{
|
||||
return data->mds->hasSet(dst);
|
||||
}
|
||||
|
||||
VIL *Material::CreateVIL(const VILConfig *format_map)
|
||||
{
|
||||
return data->vertex_input->CreateVIL(format_map);
|
||||
}
|
||||
|
||||
bool Material::Release(VIL *vil)
|
||||
{
|
||||
return data->vertex_input->Release(vil);
|
||||
}
|
||||
|
||||
const uint Material::GetVILCount()
|
||||
{
|
||||
return data->vertex_input->GetInstanceCount();
|
||||
}
|
||||
VK_NAMESPACE_END
|
||||
|
@ -8,9 +8,7 @@ MaterialInstance *GPUDevice::CreateMI(Material *mtl,const VILConfig *vil_cfg)
|
||||
{
|
||||
if(!mtl)return(nullptr);
|
||||
|
||||
VertexShaderModule *vsm=mtl->GetVertexShaderModule();
|
||||
|
||||
VIL *vil=vsm->CreateVIL(vil_cfg);
|
||||
VIL *vil=mtl->CreateVIL(vil_cfg);
|
||||
|
||||
if(!vil)return(nullptr);
|
||||
|
||||
|
@ -4,6 +4,7 @@
|
||||
#include<hgl/graph/VKShaderModuleMap.h>
|
||||
#include<hgl/graph/VKShaderResource.h>
|
||||
#include<hgl/graph/VKMaterialDescriptorSets.h>
|
||||
#include<hgl/graph/VKVertexInput.h>
|
||||
#include<hgl/filesystem/FileSystem.h>
|
||||
#include<hgl/graph/VKRenderResource.h>
|
||||
#include<hgl/io/ConstBufferReader.h>
|
||||
@ -11,18 +12,19 @@
|
||||
|
||||
VK_NAMESPACE_BEGIN
|
||||
|
||||
const ShaderModule *RenderResource::CreateShaderModule(const OSString &filename,ShaderResource *shader_resource)
|
||||
const ShaderModule *RenderResource::CreateShaderModule(const OSString &filename,VkShaderStageFlagBits shader_stage,const void *spv_data,const size_t spv_size)
|
||||
{
|
||||
if(!device)return(nullptr);
|
||||
if(filename.IsEmpty())return(nullptr);
|
||||
if(!shader_resource)return(nullptr);
|
||||
if(!spv_data)return(nullptr);
|
||||
if(spv_size<4)return(nullptr);
|
||||
|
||||
ShaderModule *sm;
|
||||
|
||||
if(shader_module_by_name.Get(filename,sm))
|
||||
return sm;
|
||||
|
||||
sm=device->CreateShaderModule(shader_resource);
|
||||
sm=device->CreateShaderModule(shader_stage,spv_data,spv_size);
|
||||
|
||||
shader_module_by_name.Add(filename,sm);
|
||||
|
||||
@ -128,6 +130,7 @@ Material *RenderResource::CreateMaterial(const OSString &filename)
|
||||
|
||||
bool result=true;
|
||||
ShaderModuleMap *smm=new ShaderModuleMap;
|
||||
VertexInput *vertex_input=nullptr;
|
||||
|
||||
OSString shader_name;
|
||||
|
||||
@ -142,12 +145,17 @@ Material *RenderResource::CreateMaterial(const OSString &filename)
|
||||
{
|
||||
shader_name=filename+OS_TEXT("?")+ToOSString(sr->GetStageName());
|
||||
|
||||
sm=CreateShaderModule(shader_name,sr);
|
||||
sm=CreateShaderModule(shader_name,sr->GetStage(),sr->GetCode(),sr->GetCodeSize());
|
||||
|
||||
if(sm)
|
||||
{
|
||||
if(smm->Add(sm))
|
||||
{
|
||||
if(sr->GetStage()==VK_SHADER_STAGE_VERTEX_BIT)
|
||||
vertex_input=new VertexInput(sr->GetInputs());
|
||||
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -172,9 +180,9 @@ Material *RenderResource::CreateMaterial(const OSString &filename)
|
||||
}
|
||||
}
|
||||
|
||||
if(result)
|
||||
if(result&&vertex_input)
|
||||
{
|
||||
mtl=device->CreateMaterial(mtl_name,smm,mds);
|
||||
mtl=device->CreateMaterial(mtl_name,smm,mds,vertex_input);
|
||||
Add(mtl);
|
||||
}
|
||||
else
|
||||
|
@ -3,135 +3,42 @@
|
||||
#include<hgl/graph/VKDevice.h>
|
||||
|
||||
VK_NAMESPACE_BEGIN
|
||||
ShaderModule *GPUDevice::CreateShaderModule(ShaderResource *sr)
|
||||
struct ShaderModuleCreateInfo:public vkstruct_flag<VkShaderModuleCreateInfo,VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO>
|
||||
{
|
||||
if(!sr)return(nullptr);
|
||||
public:
|
||||
|
||||
PipelineShaderStageCreateInfo *shader_stage=new PipelineShaderStageCreateInfo(sr->GetStage());
|
||||
ShaderModuleCreateInfo(const void *spv_data,const size_t spv_size)
|
||||
{
|
||||
codeSize=spv_size;
|
||||
pCode =(const uint32_t *)spv_data;
|
||||
}
|
||||
};//struct ShaderModuleCreateInfo
|
||||
|
||||
ShaderModuleCreateInfo moduleCreateInfo(sr);
|
||||
ShaderModule *GPUDevice::CreateShaderModule(VkShaderStageFlagBits shader_stage,const void *spv_data,const size_t spv_size)
|
||||
{
|
||||
if(!spv_data||spv_size<4)return(nullptr);
|
||||
|
||||
if(vkCreateShaderModule(attr->device,&moduleCreateInfo,nullptr,&(shader_stage->module))!=VK_SUCCESS)
|
||||
PipelineShaderStageCreateInfo *pss_ci=new PipelineShaderStageCreateInfo(shader_stage);
|
||||
|
||||
ShaderModuleCreateInfo moduleCreateInfo(spv_data,spv_size);
|
||||
|
||||
if(vkCreateShaderModule(attr->device,&moduleCreateInfo,nullptr,&(pss_ci->module))!=VK_SUCCESS)
|
||||
return(nullptr);
|
||||
|
||||
ShaderModule *sm;
|
||||
|
||||
if(sr->GetStage()==VK_SHADER_STAGE_VERTEX_BIT)
|
||||
sm=new VertexShaderModule(attr->device,shader_stage,sr);
|
||||
else
|
||||
sm=new ShaderModule(attr->device,shader_stage,sr);
|
||||
|
||||
return sm;
|
||||
return(new ShaderModule(attr->device,pss_ci));
|
||||
}
|
||||
|
||||
ShaderModule::ShaderModule(VkDevice dev,VkPipelineShaderStageCreateInfo *sci,ShaderResource *sr)
|
||||
ShaderModule::ShaderModule(VkDevice dev,VkPipelineShaderStageCreateInfo *sci)
|
||||
{
|
||||
device=dev;
|
||||
ref_count=0;
|
||||
|
||||
stage_create_info=sci;
|
||||
|
||||
shader_resource=sr;
|
||||
}
|
||||
|
||||
ShaderModule::~ShaderModule()
|
||||
{
|
||||
vkDestroyShaderModule(device,stage_create_info->module,nullptr);
|
||||
//这里不用删除stage_create_info,材质中会删除的
|
||||
|
||||
SAFE_CLEAR(shader_resource);
|
||||
}
|
||||
|
||||
VertexShaderModule::VertexShaderModule(VkDevice dev,VkPipelineShaderStageCreateInfo *pssci,ShaderResource *sr):ShaderModule(dev,pssci,sr)
|
||||
{
|
||||
const ShaderAttributeArray &stage_input_list=sr->GetInputs();
|
||||
|
||||
attr_count=stage_input_list.count;
|
||||
shader_attr_list=stage_input_list.items;
|
||||
name_list=new const char *[attr_count];
|
||||
type_list=new VAT[attr_count];
|
||||
|
||||
for(uint i=0;i<attr_count;i++)
|
||||
{
|
||||
name_list[i] =shader_attr_list[i].name;
|
||||
type_list[i].basetype =VATBaseType(shader_attr_list[i].basetype);
|
||||
type_list[i].vec_size =shader_attr_list[i].vec_size;
|
||||
}
|
||||
}
|
||||
|
||||
VertexShaderModule::~VertexShaderModule()
|
||||
{
|
||||
if(vil_sets.GetCount()>0)
|
||||
{
|
||||
//还有在用的,这是个错误
|
||||
}
|
||||
|
||||
delete[] type_list;
|
||||
delete[] name_list;
|
||||
}
|
||||
|
||||
VIL *VertexShaderModule::CreateVIL(const VILConfig *cfg)
|
||||
{
|
||||
VkVertexInputBindingDescription *binding_list=new VkVertexInputBindingDescription[attr_count];
|
||||
VkVertexInputAttributeDescription *attribute_list=new VkVertexInputAttributeDescription[attr_count];
|
||||
|
||||
VkVertexInputBindingDescription *bind_desc=binding_list;
|
||||
VkVertexInputAttributeDescription *attr_desc=attribute_list;
|
||||
|
||||
const ShaderAttribute *sa=shader_attr_list;
|
||||
VAConfig vac;
|
||||
|
||||
for(uint i=0;i<attr_count;i++)
|
||||
{
|
||||
//binding对应的是第几个数据输入流
|
||||
//实际使用一个binding可以绑定多个attrib
|
||||
//比如在一个流中传递{pos,color}这样两个数据,就需要两个attrib
|
||||
//但在我们的设计中,仅支持一个流传递一个attrib
|
||||
|
||||
attr_desc->binding =i;
|
||||
attr_desc->location =sa->location; //此值对应shader中的layout(location=
|
||||
|
||||
attr_desc->offset =0;
|
||||
|
||||
bind_desc->binding =i; //binding对应在vkCmdBindVertexBuffer中设置的缓冲区的序列号,所以这个数字必须从0开始,而且紧密排列。
|
||||
//在Renderable类中,buffer_list必需严格按照本此binding为序列号排列
|
||||
|
||||
if(!cfg||!cfg->Get(sa->name,vac))
|
||||
{
|
||||
attr_desc->format =GetVulkanFormat(sa);
|
||||
|
||||
//if(memcmp((*sa)->name.c_str(),"Inst_",5)==0) //不可以使用CaseComp("Inst_",5)会被认为是比较一个5字长的字符串,而不是只比较5个字符
|
||||
// bind_desc->inputRate =VK_VERTEX_INPUT_RATE_INSTANCE;
|
||||
//else
|
||||
bind_desc->inputRate =VK_VERTEX_INPUT_RATE_VERTEX;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(vac.format!=PF_UNDEFINED)
|
||||
attr_desc->format =vac.format;
|
||||
else
|
||||
attr_desc->format =GetVulkanFormat(sa);
|
||||
|
||||
bind_desc->inputRate =vac.instance?VK_VERTEX_INPUT_RATE_INSTANCE:VK_VERTEX_INPUT_RATE_VERTEX;
|
||||
}
|
||||
|
||||
bind_desc->stride =GetStrideByFormat(attr_desc->format);
|
||||
|
||||
++attr_desc;
|
||||
++bind_desc;
|
||||
|
||||
++sa;
|
||||
}
|
||||
|
||||
VIL *vil=new VIL(attr_count,name_list,type_list,binding_list,attribute_list);
|
||||
|
||||
vil_sets.Add(vil);
|
||||
|
||||
return(vil);
|
||||
}
|
||||
|
||||
bool VertexShaderModule::Release(VIL *vil)
|
||||
{
|
||||
return vil_sets.Delete(vil);
|
||||
}
|
||||
VK_NAMESPACE_END
|
||||
|
@ -3,6 +3,7 @@
|
||||
#include<hgl/graph/font/TileFont.h>
|
||||
#include<hgl/graph/font/TextLayout.h>
|
||||
#include<hgl/graph/VKDevice.h>
|
||||
#include<hgl/graph/VKVertexInputConfig.h>
|
||||
#include<hgl/color/Color.h>
|
||||
|
||||
namespace hgl
|
||||
|
Loading…
x
Reference in New Issue
Block a user