更合理的数据分类,建立Renderable,删除vertexinput。
This commit is contained in:
parent
8f60701a51
commit
20f2aa7277
@ -24,12 +24,12 @@ SET(VULKAN_TEST_SOURCE_FILES main.cpp
|
|||||||
VKShaderModule.cpp
|
VKShaderModule.cpp
|
||||||
VKShaderModuleManage.cpp
|
VKShaderModuleManage.cpp
|
||||||
VKVertexAttributeBinding.cpp
|
VKVertexAttributeBinding.cpp
|
||||||
VKVertexInput.cpp
|
|
||||||
VKPipeline.cpp
|
VKPipeline.cpp
|
||||||
VKSemaphore.cpp
|
VKSemaphore.cpp
|
||||||
VKFramebuffer.cpp
|
VKFramebuffer.cpp
|
||||||
VKFence.cpp
|
VKFence.cpp
|
||||||
VKMaterial.cpp
|
VKMaterial.cpp
|
||||||
|
VKRenderable.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
SET(VULKAN_TEST_HEADER_FILES AssetsManage.h
|
SET(VULKAN_TEST_HEADER_FILES AssetsManage.h
|
||||||
@ -49,13 +49,13 @@ SET(VULKAN_TEST_HEADER_FILES AssetsManage.h
|
|||||||
VKRenderPass.h
|
VKRenderPass.h
|
||||||
VKShaderModule.h
|
VKShaderModule.h
|
||||||
VKShaderModuleManage.h
|
VKShaderModuleManage.h
|
||||||
VKVertexInput.h
|
|
||||||
VKVertexAttributeBinding.h
|
VKVertexAttributeBinding.h
|
||||||
VKSemaphore.h
|
VKSemaphore.h
|
||||||
VKPipeline.h
|
VKPipeline.h
|
||||||
VKFramebuffer.h
|
VKFramebuffer.h
|
||||||
VKFence.h
|
VKFence.h
|
||||||
VKMaterial.h
|
VKMaterial.h
|
||||||
|
VKRenderable.h
|
||||||
Window.h)
|
Window.h)
|
||||||
|
|
||||||
SET(SHADER_FILES shader_compile.bat
|
SET(SHADER_FILES shader_compile.bat
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
#include"VKPipeline.h"
|
#include"VKPipeline.h"
|
||||||
#include"VKPipelineLayout.h"
|
#include"VKPipelineLayout.h"
|
||||||
#include"VKBuffer.h"
|
#include"VKBuffer.h"
|
||||||
#include"VKVertexInput.h"
|
#include"VKRenderable.h"
|
||||||
#include"VKDescriptorSets.h"
|
#include"VKDescriptorSets.h"
|
||||||
|
|
||||||
VK_NAMESPACE_BEGIN
|
VK_NAMESPACE_BEGIN
|
||||||
@ -84,22 +84,22 @@ bool CommandBuffer::Bind(PipelineLayout *pl)
|
|||||||
return(true);
|
return(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CommandBuffer::Bind(VertexInput *vi)
|
bool CommandBuffer::Bind(Renderable *render_obj)
|
||||||
{
|
{
|
||||||
if(!vi)
|
if(!render_obj)
|
||||||
return(false);
|
return(false);
|
||||||
|
|
||||||
const uint count=vi->GetCount();
|
const uint count=render_obj->GetBufferCount();
|
||||||
|
|
||||||
if(count<=0)
|
if(count<=0)
|
||||||
return(false);
|
return(false);
|
||||||
|
|
||||||
vkCmdBindVertexBuffers(cmd_buf,0,count,vi->GetBuffer(),vi->GetOffset());
|
vkCmdBindVertexBuffers(cmd_buf,0,count,render_obj->GetBuffer(),render_obj->GetOffset());
|
||||||
|
|
||||||
IndexBuffer *indices_buffer=vi->GetIndexBuffer();
|
IndexBuffer *indices_buffer=render_obj->GetIndexBuffer();
|
||||||
|
|
||||||
if(indices_buffer)
|
if(indices_buffer)
|
||||||
vkCmdBindIndexBuffer(cmd_buf,*indices_buffer,vi->GetIndexOffset(),indices_buffer->GetType());
|
vkCmdBindIndexBuffer(cmd_buf,*indices_buffer,render_obj->GetIndexOffset(),indices_buffer->GetType());
|
||||||
|
|
||||||
return(true);
|
return(true);
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,7 @@ class RenderPass;
|
|||||||
class Framebuffer;
|
class Framebuffer;
|
||||||
class Pipeline;
|
class Pipeline;
|
||||||
class PipelineLayout;
|
class PipelineLayout;
|
||||||
class VertexInput;
|
class Renderable;
|
||||||
|
|
||||||
class CommandBuffer
|
class CommandBuffer
|
||||||
{
|
{
|
||||||
@ -46,7 +46,7 @@ public:
|
|||||||
bool Begin(RenderPass *rp,Framebuffer *fb);
|
bool Begin(RenderPass *rp,Framebuffer *fb);
|
||||||
bool Bind(Pipeline *p);
|
bool Bind(Pipeline *p);
|
||||||
bool Bind(PipelineLayout *pl);
|
bool Bind(PipelineLayout *pl);
|
||||||
bool Bind(VertexInput *vi);
|
bool Bind(Renderable *);
|
||||||
bool End();
|
bool End();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
@ -3,7 +3,8 @@
|
|||||||
#include"VKDescriptorSets.h"
|
#include"VKDescriptorSets.h"
|
||||||
#include"VKShaderModule.h"
|
#include"VKShaderModule.h"
|
||||||
#include"VKVertexAttributeBinding.h"
|
#include"VKVertexAttributeBinding.h"
|
||||||
#include"VKVertexInput.h"
|
#include"VKRenderable.h"
|
||||||
|
#include"VKBuffer.h"
|
||||||
VK_NAMESPACE_BEGIN
|
VK_NAMESPACE_BEGIN
|
||||||
Material::Material(Device *dev,ShaderModuleMap *smm)
|
Material::Material(Device *dev,ShaderModuleMap *smm)
|
||||||
{
|
{
|
||||||
@ -76,6 +77,13 @@ const int Material::GetUBOBinding(const UTF8String &name)const
|
|||||||
return(-1);
|
return(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const int Material::GetVBOBinding(const UTF8String &name)const
|
||||||
|
{
|
||||||
|
if(!vertex_sm)return(-1);
|
||||||
|
|
||||||
|
return vertex_sm->GetBinding(name);
|
||||||
|
}
|
||||||
|
|
||||||
MaterialInstance *Material::CreateInstance()const
|
MaterialInstance *Material::CreateInstance()const
|
||||||
{
|
{
|
||||||
if(!vertex_sm)
|
if(!vertex_sm)
|
||||||
@ -86,23 +94,21 @@ MaterialInstance *Material::CreateInstance()const
|
|||||||
if(!vab)
|
if(!vab)
|
||||||
return(nullptr);
|
return(nullptr);
|
||||||
|
|
||||||
VertexInput *vi=new VertexInput(vertex_sm);
|
|
||||||
DescriptorSetLayout *dsl=dsl_creater->Create();
|
DescriptorSetLayout *dsl=dsl_creater->Create();
|
||||||
|
|
||||||
return(new MaterialInstance(this,vab,vi,dsl));
|
return(new MaterialInstance(this,vertex_sm,vab,dsl));
|
||||||
}
|
}
|
||||||
|
|
||||||
MaterialInstance::MaterialInstance(const Material *m,VertexAttributeBinding *v,VertexInput *i,DescriptorSetLayout *d)
|
MaterialInstance::MaterialInstance(const Material *m,const VertexShaderModule *vsm,VertexAttributeBinding *v,DescriptorSetLayout *d)
|
||||||
{
|
{
|
||||||
mat=m;
|
mat=m;
|
||||||
|
vertex_sm=vsm;
|
||||||
vab=v;
|
vab=v;
|
||||||
desc_set_layout=d;
|
desc_set_layout=d;
|
||||||
vi=i;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
MaterialInstance::~MaterialInstance()
|
MaterialInstance::~MaterialInstance()
|
||||||
{
|
{
|
||||||
delete vi;
|
|
||||||
delete desc_set_layout;
|
delete desc_set_layout;
|
||||||
delete vab;
|
delete vab;
|
||||||
}
|
}
|
||||||
@ -116,4 +122,9 @@ void MaterialInstance::Write(VkPipelineVertexInputStateCreateInfo &vis)const
|
|||||||
{
|
{
|
||||||
return vab->Write(vis);
|
return vab->Write(vis);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Renderable *MaterialInstance::CreateRenderable()
|
||||||
|
{
|
||||||
|
return(new Renderable(vertex_sm));
|
||||||
|
}
|
||||||
VK_NAMESPACE_END
|
VK_NAMESPACE_END
|
||||||
|
@ -12,7 +12,8 @@ class DescriptorSetLayoutCreater;
|
|||||||
class DescriptorSetLayout;
|
class DescriptorSetLayout;
|
||||||
class MaterialInstance;
|
class MaterialInstance;
|
||||||
class VertexAttributeBinding;
|
class VertexAttributeBinding;
|
||||||
class VertexInput;
|
class VertexBuffer;
|
||||||
|
class Renderable;
|
||||||
|
|
||||||
using ShaderModuleMap=hgl::Map<VkShaderStageFlagBits,const ShaderModule *>;
|
using ShaderModuleMap=hgl::Map<VkShaderStageFlagBits,const ShaderModule *>;
|
||||||
|
|
||||||
@ -35,11 +36,12 @@ public:
|
|||||||
~Material();
|
~Material();
|
||||||
|
|
||||||
const int GetUBOBinding(const UTF8String &)const;
|
const int GetUBOBinding(const UTF8String &)const;
|
||||||
|
const int GetVBOBinding(const UTF8String &)const;
|
||||||
|
|
||||||
MaterialInstance *CreateInstance()const;
|
MaterialInstance *CreateInstance()const;
|
||||||
|
|
||||||
const uint32_t GetStageCount ()const{return shader_stage_list.GetCount();}
|
const uint32_t GetStageCount ()const{return shader_stage_list.GetCount();}
|
||||||
const VkPipelineShaderStageCreateInfo * GetStages ()const{return shader_stage_list.GetData();}
|
const VkPipelineShaderStageCreateInfo * GetStages ()const{return shader_stage_list.GetData();}
|
||||||
};//class Material
|
};//class Material
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -49,13 +51,13 @@ public:
|
|||||||
class MaterialInstance
|
class MaterialInstance
|
||||||
{
|
{
|
||||||
const Material *mat; ///<这里的是对material的完全引用,不做任何修改
|
const Material *mat; ///<这里的是对material的完全引用,不做任何修改
|
||||||
|
const VertexShaderModule *vertex_sm;
|
||||||
VertexAttributeBinding *vab;
|
VertexAttributeBinding *vab;
|
||||||
VertexInput *vi;
|
|
||||||
DescriptorSetLayout *desc_set_layout;
|
DescriptorSetLayout *desc_set_layout;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
MaterialInstance(const Material *m,VertexAttributeBinding *v,VertexInput *i,DescriptorSetLayout *d);
|
MaterialInstance(const Material *m,const VertexShaderModule *,VertexAttributeBinding *v,DescriptorSetLayout *d);
|
||||||
~MaterialInstance();
|
~MaterialInstance();
|
||||||
|
|
||||||
bool UpdateUBO(const uint32_t binding,const VkDescriptorBufferInfo *buf_info);
|
bool UpdateUBO(const uint32_t binding,const VkDescriptorBufferInfo *buf_info);
|
||||||
@ -67,12 +69,16 @@ public:
|
|||||||
return UpdateUBO(mat->GetUBOBinding(name),buf_info);
|
return UpdateUBO(mat->GetUBOBinding(name),buf_info);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const VertexShaderModule * GetVertexShader ()const{return vertex_sm;}
|
||||||
|
|
||||||
const uint32_t GetStageCount ()const{return mat->GetStageCount();}
|
const uint32_t GetStageCount ()const{return mat->GetStageCount();}
|
||||||
const VkPipelineShaderStageCreateInfo * GetStages ()const{return mat->GetStages();}
|
const VkPipelineShaderStageCreateInfo * GetStages ()const{return mat->GetStages();}
|
||||||
|
|
||||||
void Write(VkPipelineVertexInputStateCreateInfo &vis)const;
|
void Write(VkPipelineVertexInputStateCreateInfo &vis)const;
|
||||||
|
|
||||||
VertexInput * GetVI(){return vi;}
|
|
||||||
DescriptorSetLayout * GetDSL(){return desc_set_layout;}
|
DescriptorSetLayout * GetDSL(){return desc_set_layout;}
|
||||||
|
|
||||||
|
Renderable *CreateRenderable();
|
||||||
};//class MaterialInstance
|
};//class MaterialInstance
|
||||||
VK_NAMESPACE_END
|
VK_NAMESPACE_END
|
||||||
#endif//HGL_GRAPH_VULKAN_MATERIAL_INCLUDE
|
#endif//HGL_GRAPH_VULKAN_MATERIAL_INCLUDE
|
||||||
|
44
example/Vulkan/VKRenderable.cpp
Normal file
44
example/Vulkan/VKRenderable.cpp
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
#include"VKRenderable.h"
|
||||||
|
#include"VKBuffer.h"
|
||||||
|
#include"VKShaderModule.h"
|
||||||
|
|
||||||
|
VK_NAMESPACE_BEGIN
|
||||||
|
Renderable::Renderable(const VertexShaderModule *vsm)
|
||||||
|
{
|
||||||
|
vertex_sm=vsm;
|
||||||
|
|
||||||
|
buf_count=vertex_sm->GetAttrCount();
|
||||||
|
|
||||||
|
buf_list=hgl_zero_new<VkBuffer>(buf_count);
|
||||||
|
buf_offset=hgl_zero_new<VkDeviceSize>(buf_count);
|
||||||
|
}
|
||||||
|
|
||||||
|
Renderable::~Renderable()
|
||||||
|
{
|
||||||
|
delete[] buf_offset;
|
||||||
|
delete[] buf_list;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Renderable::Set(const int binding,VertexBuffer *vbo,VkDeviceSize offset)
|
||||||
|
{
|
||||||
|
if(binding<0||binding>=buf_count||!vbo)return(false);
|
||||||
|
|
||||||
|
const VkVertexInputBindingDescription *desc=vertex_sm->GetDesc(binding);
|
||||||
|
const VkVertexInputAttributeDescription *attr=vertex_sm->GetAttr(binding);
|
||||||
|
|
||||||
|
if(vbo->GetFormat()!=attr->format)return(false);
|
||||||
|
if(vbo->GetStride()!=desc->stride)return(false);
|
||||||
|
|
||||||
|
//format信息来自于shader->MaterialInstance,实际中可以不一样。但那样需要为每一个格式产生一个同样shader的material instance,不同的格式又需要不同的pipeline,我们不支持这种行为
|
||||||
|
|
||||||
|
buf_list[binding]=*vbo;
|
||||||
|
buf_offset[binding]=offset;
|
||||||
|
|
||||||
|
return(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Renderable::Set(const UTF8String &name,VertexBuffer *vbo,VkDeviceSize offset)
|
||||||
|
{
|
||||||
|
return Set(vertex_sm->GetBinding(name),vbo,offset);
|
||||||
|
}
|
||||||
|
VK_NAMESPACE_END
|
@ -1,22 +1,22 @@
|
|||||||
#ifndef HGL_GRAPH_VULKAN_VERTEX_INPUT_INCLUDE
|
#ifndef HGL_GRAPH_VULKAN_RENDERABLE_INCLUDE
|
||||||
#define HGL_GRAPH_VULKAN_VERTEX_INPUT_INCLUDE
|
#define HGL_GRAPH_VULKAN_RENDERABLE_INCLUDE
|
||||||
|
|
||||||
#include"VK.h"
|
#include"VK.h"
|
||||||
#include<hgl/type/BaseString.h>
|
#include<hgl/type/BaseString.h>
|
||||||
VK_NAMESPACE_BEGIN
|
VK_NAMESPACE_BEGIN
|
||||||
|
class VertexShaderModule;
|
||||||
class VertexBuffer;
|
class VertexBuffer;
|
||||||
class IndexBuffer;
|
class IndexBuffer;
|
||||||
class VertexShaderModule;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 顶点输入配置,负责具体的buffer绑定,提供给CommandBuffer使用<br>
|
* 可渲染对象<br>
|
||||||
* 注:本引擎不支持一个Buffer中包括多种数据
|
* 本对象包含材质实例信息和Mesh信息
|
||||||
*/
|
*/
|
||||||
class VertexInput
|
class Renderable
|
||||||
{
|
{
|
||||||
const VertexShaderModule *shader;
|
const VertexShaderModule *vertex_sm;
|
||||||
|
|
||||||
int buf_count=0;
|
int buf_count;
|
||||||
VkBuffer *buf_list=nullptr;
|
VkBuffer *buf_list=nullptr;
|
||||||
VkDeviceSize *buf_offset=nullptr;
|
VkDeviceSize *buf_offset=nullptr;
|
||||||
|
|
||||||
@ -25,8 +25,8 @@ class VertexInput
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
VertexInput(const VertexShaderModule *);
|
Renderable(const VertexShaderModule *);
|
||||||
virtual ~VertexInput();
|
virtual ~Renderable();
|
||||||
|
|
||||||
bool Set(const int binding, VertexBuffer *vb,VkDeviceSize offset=0);
|
bool Set(const int binding, VertexBuffer *vb,VkDeviceSize offset=0);
|
||||||
bool Set(const UTF8String &name,VertexBuffer *vb,VkDeviceSize offset=0);
|
bool Set(const UTF8String &name,VertexBuffer *vb,VkDeviceSize offset=0);
|
||||||
@ -42,12 +42,12 @@ public:
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
const int GetCount ()const{return buf_count;}
|
const int GetBufferCount ()const{return buf_count;}
|
||||||
const VkBuffer * GetBuffer ()const{return buf_list;}
|
const VkBuffer * GetBuffer ()const{return buf_list;}
|
||||||
const VkDeviceSize * GetOffset ()const{return buf_offset;}
|
const VkDeviceSize * GetOffset ()const{return buf_offset;}
|
||||||
|
|
||||||
IndexBuffer * GetIndexBuffer() {return indices_buffer;}
|
IndexBuffer * GetIndexBuffer() {return indices_buffer;}
|
||||||
const VkDeviceSize GetIndexOffset()const{return indices_offset;}
|
const VkDeviceSize GetIndexOffset()const{return indices_offset;}
|
||||||
};//class VertexInput
|
};//class Renderable
|
||||||
VK_NAMESPACE_END
|
VK_NAMESPACE_END
|
||||||
#endif//HGL_GRAPH_VULKAN_VERTEX_INPUT_INCLUDE
|
#endif//HGL_GRAPH_VULKAN_RENDERABLE_INCLUDE
|
@ -1,47 +0,0 @@
|
|||||||
#include"VKVertexInput.h"
|
|
||||||
#include"VKBuffer.h"
|
|
||||||
#include"VKShaderModule.h"
|
|
||||||
|
|
||||||
VK_NAMESPACE_BEGIN
|
|
||||||
VertexInput::VertexInput(const VertexShaderModule *s)
|
|
||||||
{
|
|
||||||
shader=s;
|
|
||||||
|
|
||||||
if(!shader)
|
|
||||||
return;
|
|
||||||
|
|
||||||
buf_count=shader->GetAttrCount();
|
|
||||||
|
|
||||||
buf_list=hgl_zero_new<VkBuffer>(buf_count);
|
|
||||||
buf_offset=hgl_zero_new<VkDeviceSize>(buf_count);
|
|
||||||
}
|
|
||||||
|
|
||||||
VertexInput::~VertexInput()
|
|
||||||
{
|
|
||||||
delete[] buf_offset;
|
|
||||||
delete[] buf_list;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool VertexInput::Set(const int index,VertexBuffer *buf,VkDeviceSize offset)
|
|
||||||
{
|
|
||||||
if(index<0||index>=buf_count)return(false);
|
|
||||||
|
|
||||||
const VkVertexInputBindingDescription *desc=shader->GetDesc(index);
|
|
||||||
const VkVertexInputAttributeDescription *attr=shader->GetAttr(index);
|
|
||||||
|
|
||||||
if(buf->GetFormat()!=attr->format)return(false);
|
|
||||||
if(buf->GetStride()!=desc->stride)return(false);
|
|
||||||
|
|
||||||
buf_list[index]=*buf;
|
|
||||||
buf_offset[index]=offset;
|
|
||||||
|
|
||||||
return(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool VertexInput::Set(const UTF8String &name,VertexBuffer *vb,VkDeviceSize offset)
|
|
||||||
{
|
|
||||||
const int binding=shader->GetBinding(name);
|
|
||||||
|
|
||||||
return Set(binding,vb,offset);
|
|
||||||
}
|
|
||||||
VK_NAMESPACE_END
|
|
@ -6,7 +6,7 @@
|
|||||||
#include"VKShaderModule.h"
|
#include"VKShaderModule.h"
|
||||||
#include"VKShaderModuleManage.h"
|
#include"VKShaderModuleManage.h"
|
||||||
#include"VKImageView.h"
|
#include"VKImageView.h"
|
||||||
#include"VKVertexInput.h"
|
#include"VKRenderable.h"
|
||||||
#include"VKDescriptorSets.h"
|
#include"VKDescriptorSets.h"
|
||||||
#include"VKRenderPass.h"
|
#include"VKRenderPass.h"
|
||||||
#include"VKPipelineLayout.h"
|
#include"VKPipelineLayout.h"
|
||||||
@ -40,24 +40,31 @@ vulkan::Buffer *CreateUBO(vulkan::Device *dev)
|
|||||||
return dev->CreateUBO(sizeof(WorldConfig),&world);
|
return dev->CreateUBO(sizeof(WorldConfig),&world);
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr float vertex_data[]=
|
constexpr uint32_t VERTEX_COUNT=3;
|
||||||
|
|
||||||
|
constexpr float vertex_data[VERTEX_COUNT][2]=
|
||||||
{
|
{
|
||||||
SCREEN_WIDTH*0.5, SCREEN_HEIGHT*0.25,
|
{SCREEN_WIDTH*0.5, SCREEN_HEIGHT*0.25},
|
||||||
SCREEN_WIDTH*0.75, SCREEN_HEIGHT*0.75,
|
{SCREEN_WIDTH*0.75, SCREEN_HEIGHT*0.75},
|
||||||
SCREEN_WIDTH*0.25, SCREEN_HEIGHT*0.75
|
{SCREEN_WIDTH*0.25, SCREEN_HEIGHT*0.75}
|
||||||
|
};
|
||||||
|
|
||||||
|
constexpr float color_data[VERTEX_COUNT][3]=
|
||||||
|
{ {1,0,0},
|
||||||
|
{0,1,0},
|
||||||
|
{0,0,1}
|
||||||
};
|
};
|
||||||
constexpr float color_data[]={1,0,0, 0,1,0, 0,0,1 };
|
|
||||||
|
|
||||||
vulkan::VertexBuffer *vertex_buffer=nullptr;
|
vulkan::VertexBuffer *vertex_buffer=nullptr;
|
||||||
vulkan::VertexBuffer *color_buffer=nullptr;
|
vulkan::VertexBuffer *color_buffer=nullptr;
|
||||||
|
|
||||||
void CreateVertexBuffer(vulkan::Device *dev,vulkan::VertexInput *vi)
|
void CreateVertexBuffer(vulkan::Device *dev,vulkan::Renderable *render_obj)
|
||||||
{
|
{
|
||||||
vertex_buffer =dev->CreateVBO(FMT_RG32F, 3,vertex_data);
|
vertex_buffer =dev->CreateVBO(FMT_RG32F, VERTEX_COUNT,vertex_data);
|
||||||
color_buffer =dev->CreateVBO(FMT_RGB32F, 3,color_data);
|
color_buffer =dev->CreateVBO(FMT_RGB32F, VERTEX_COUNT,color_data);
|
||||||
|
|
||||||
vi->Set("Vertex", vertex_buffer);
|
render_obj->Set("Vertex", vertex_buffer);
|
||||||
vi->Set("Color", color_buffer);
|
render_obj->Set("Color", color_buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
void wait_seconds(int seconds) {
|
void wait_seconds(int seconds) {
|
||||||
@ -123,6 +130,7 @@ int main(int,char **)
|
|||||||
return -3;
|
return -3;
|
||||||
|
|
||||||
vulkan::MaterialInstance *mi=material->CreateInstance();
|
vulkan::MaterialInstance *mi=material->CreateInstance();
|
||||||
|
vulkan::Renderable *render_obj=mi->CreateRenderable();
|
||||||
|
|
||||||
vulkan::Buffer *ubo=CreateUBO(device);
|
vulkan::Buffer *ubo=CreateUBO(device);
|
||||||
|
|
||||||
@ -130,7 +138,7 @@ int main(int,char **)
|
|||||||
|
|
||||||
mi->UpdateUBO("world",*ubo);
|
mi->UpdateUBO("world",*ubo);
|
||||||
|
|
||||||
CreateVertexBuffer(device,mi->GetVI());
|
CreateVertexBuffer(device,render_obj);
|
||||||
|
|
||||||
vulkan::PipelineLayout *pl=CreatePipelineLayout(*device,mi->GetDSL());
|
vulkan::PipelineLayout *pl=CreatePipelineLayout(*device,mi->GetDSL());
|
||||||
|
|
||||||
@ -154,15 +162,15 @@ int main(int,char **)
|
|||||||
cmd_buf->Begin(device->GetRenderPass(),device->GetFramebuffer(0));
|
cmd_buf->Begin(device->GetRenderPass(),device->GetFramebuffer(0));
|
||||||
cmd_buf->Bind(pipeline);
|
cmd_buf->Bind(pipeline);
|
||||||
cmd_buf->Bind(pl);
|
cmd_buf->Bind(pl);
|
||||||
cmd_buf->Bind(mi->GetVI());
|
cmd_buf->Bind(render_obj);
|
||||||
cmd_buf->Draw(3);
|
cmd_buf->Draw(VERTEX_COUNT);
|
||||||
cmd_buf->End();
|
cmd_buf->End();
|
||||||
|
|
||||||
device->QueueSubmit(cmd_buf);
|
device->QueueSubmit(cmd_buf);
|
||||||
device->Wait();
|
device->Wait();
|
||||||
device->QueuePresent();
|
device->QueuePresent();
|
||||||
|
|
||||||
wait_seconds(2);
|
wait_seconds(1);
|
||||||
|
|
||||||
delete vertex_buffer;
|
delete vertex_buffer;
|
||||||
delete color_buffer;
|
delete color_buffer;
|
||||||
@ -170,12 +178,7 @@ int main(int,char **)
|
|||||||
delete pipeline;
|
delete pipeline;
|
||||||
|
|
||||||
delete pl;
|
delete pl;
|
||||||
// delete dsl;
|
|
||||||
|
|
||||||
// delete vi;
|
|
||||||
delete ubo;
|
delete ubo;
|
||||||
|
|
||||||
// delete shader;
|
|
||||||
delete mi;
|
delete mi;
|
||||||
|
|
||||||
delete cmd_buf;
|
delete cmd_buf;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user