测试多个CommandBuffer

This commit is contained in:
hyzboy 2019-05-04 16:31:28 +08:00
parent 4c7ffda1aa
commit be0d2dcd2c

View File

@ -4,8 +4,8 @@
using namespace hgl; using namespace hgl;
using namespace hgl::graph; using namespace hgl::graph;
constexpr uint32_t SCREEN_WIDTH=128; constexpr uint32_t SCREEN_WIDTH=1280;
constexpr uint32_t SCREEN_HEIGHT=128; constexpr uint32_t SCREEN_HEIGHT=720;
struct WorldConfig struct WorldConfig
{ {
@ -29,7 +29,9 @@ constexpr float color_data[VERTEX_COUNT][3]=
class TestApp:public VulkanApplicationFramework class TestApp:public VulkanApplicationFramework
{ {
private: //需释放数据 private:
uint swap_chain_count=0;
vulkan::Material * material =nullptr; vulkan::Material * material =nullptr;
vulkan::Renderable * render_obj =nullptr; vulkan::Renderable * render_obj =nullptr;
@ -37,7 +39,7 @@ private: //需释放数据
vulkan::PipelineCreater * pipeline_creater =nullptr; vulkan::PipelineCreater * pipeline_creater =nullptr;
vulkan::Pipeline * pipeline =nullptr; vulkan::Pipeline * pipeline =nullptr;
vulkan::CommandBuffer * cmd_buf =nullptr; vulkan::CommandBuffer ** cmd_buf =nullptr;
vulkan::VertexBuffer * vertex_buffer =nullptr; vulkan::VertexBuffer * vertex_buffer =nullptr;
vulkan::VertexBuffer * color_buffer =nullptr; vulkan::VertexBuffer * color_buffer =nullptr;
@ -48,7 +50,7 @@ public:
{ {
SAFE_CLEAR(color_buffer); SAFE_CLEAR(color_buffer);
SAFE_CLEAR(vertex_buffer); SAFE_CLEAR(vertex_buffer);
SAFE_CLEAR(cmd_buf); SAFE_CLEAR_OBJECT_ARRAY(cmd_buf,swap_chain_count);
SAFE_CLEAR(pipeline); SAFE_CLEAR(pipeline);
SAFE_CLEAR(pipeline_creater); SAFE_CLEAR(pipeline_creater);
SAFE_CLEAR(ubo_mvp); SAFE_CLEAR(ubo_mvp);
@ -107,19 +109,24 @@ private:
bool InitCommandBuffer() bool InitCommandBuffer()
{ {
cmd_buf=device->CreateCommandBuffer(); cmd_buf=hgl_zero_new<vulkan::CommandBuffer *>(swap_chain_count);
if(!cmd_buf) for(uint i=0;i<swap_chain_count;i++)
return(false); {
cmd_buf[i]=device->CreateCommandBuffer();
cmd_buf->Begin(); if(!cmd_buf[i])
cmd_buf->BeginRenderPass(device->GetRenderPass(),device->GetFramebuffer(0)); return(false);
cmd_buf->Bind(pipeline);
cmd_buf->Bind(material); cmd_buf[i]->Begin();
cmd_buf->Bind(render_obj); cmd_buf[i]->BeginRenderPass(device->GetRenderPass(),device->GetFramebuffer(i));
cmd_buf->Draw(VERTEX_COUNT); cmd_buf[i]->Bind(pipeline);
cmd_buf->EndRenderPass(); cmd_buf[i]->Bind(material);
cmd_buf->End(); cmd_buf[i]->Bind(render_obj);
cmd_buf[i]->Draw(VERTEX_COUNT);
cmd_buf[i]->EndRenderPass();
cmd_buf[i]->End();
}
return(true); return(true);
} }
@ -131,6 +138,8 @@ public:
if(!VulkanApplicationFramework::Init(SCREEN_WIDTH,SCREEN_HEIGHT)) if(!VulkanApplicationFramework::Init(SCREEN_WIDTH,SCREEN_HEIGHT))
return(false); return(false);
swap_chain_count=device->GetSwapChainImageCount();
if(!InitMaterial()) if(!InitMaterial())
return(false); return(false);
@ -150,7 +159,8 @@ public:
void Draw() void Draw()
{ {
Submit(cmd_buf); AcquireNextFrame();
Submit(cmd_buf[device->GetCurrentFrameIndices()]);
} }
};//class TestApp:public VulkanApplicationFramework };//class TestApp:public VulkanApplicationFramework
@ -166,10 +176,8 @@ int main(int,char **)
if(!app.Init()) if(!app.Init())
return(-1); return(-1);
app.AcquireNextFrame(); while(app.Run())
app.Draw(); app.Draw();
while(app.Run());
return 0; return 0;
} }