From 89369484dad0c63ca2c8af1eb3141e546ffd5cd0 Mon Sep 17 00:00:00 2001 From: HuYingzhuo Date: Thu, 18 Apr 2019 22:10:24 +0800 Subject: [PATCH] =?UTF-8?q?include=E6=95=B4=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- example/Vulkan/VKCommandBuffer.cpp | 55 +++++++++++++++++++++++++++- example/Vulkan/VKCommandBuffer.h | 43 +++++++++------------- example/Vulkan/VKDevice.cpp | 4 ++ example/Vulkan/VKDevice.h | 11 +++--- example/Vulkan/VKDeviceAttribute.cpp | 6 +++ example/Vulkan/VKDeviceAttribute.h | 8 ++-- example/Vulkan/VKDeviceCreater.cpp | 1 + example/Vulkan/VKFramebuffer.cpp | 2 + example/Vulkan/VKFramebuffer.h | 7 +++- example/Vulkan/VKInstance.cpp | 2 +- example/Vulkan/VKInstance.h | 4 +- example/Vulkan/VKPipeline.cpp | 1 + example/Vulkan/VKPipeline.h | 2 +- example/Vulkan/VKPipelineLayout.cpp | 1 + example/Vulkan/VKPipelineLayout.h | 2 +- example/Vulkan/VKVertexInput.cpp | 1 + example/Vulkan/VKVertexInput.h | 3 +- example/Vulkan/main.cpp | 4 ++ 18 files changed, 114 insertions(+), 43 deletions(-) diff --git a/example/Vulkan/VKCommandBuffer.cpp b/example/Vulkan/VKCommandBuffer.cpp index f04d5dc8..869f84ad 100644 --- a/example/Vulkan/VKCommandBuffer.cpp +++ b/example/Vulkan/VKCommandBuffer.cpp @@ -1,9 +1,62 @@ #include"VKCommandBuffer.h" +#include"VKRenderPass.h" +#include"VKFramebuffer.h" +#include"VKPipeline.h" +#include"VKVertexInput.h" VK_NAMESPACE_BEGIN +CommandBuffer::CommandBuffer(VkDevice dev,VkCommandPool cp,VkCommandBuffer cb) +{ + device=dev; + pool=cp; + cmd_buf=cb; + + clear_values[0].color.float32[0] = 0.2f; + clear_values[0].color.float32[1] = 0.2f; + clear_values[0].color.float32[2] = 0.2f; + clear_values[0].color.float32[3] = 0.2f; + clear_values[1].depthStencil.depth = 1.0f; + clear_values[1].depthStencil.stencil = 0; +} + CommandBuffer::~CommandBuffer() { - VkCommandBuffer cmd_bufs[1] = {buf}; + VkCommandBuffer cmd_bufs[1] = {cmd_buf}; vkFreeCommandBuffers(device, pool, 1, cmd_bufs); } + +bool CommandBuffer::Bind(RenderPass *rp,Framebuffer *fb,Pipeline *p) +{ + VkRenderPassBeginInfo rp_begin; + + rp_begin.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO; + rp_begin.pNext = nullptr; + rp_begin.renderPass = *rp; + rp_begin.framebuffer = *fb; + rp_begin.renderArea = render_area; + rp_begin.clearValueCount = 2; + rp_begin.pClearValues = clear_values; + + vkCmdBeginRenderPass(cmd_buf, &rp_begin, VK_SUBPASS_CONTENTS_INLINE); + vkCmdBindPipeline(cmd_buf, VK_PIPELINE_BIND_POINT_GRAPHICS, *p); + + return(true); +} + +bool CommandBuffer::Bind(VertexInput *vi) +{ + if(!vi) + return(false); + + const List &buf_list=vi->GetBufferList(); + + if(buf_list.GetCount()<=0) + return(false); + + constexpr VkDeviceSize zero_offsets[1]={0}; + + vkCmdBindVertexBuffers(cmd_buf,0,buf_list.GetCount(),buf_list.GetData(),zero_offsets); + + return(true); +} VK_NAMESPACE_END diff --git a/example/Vulkan/VKCommandBuffer.h b/example/Vulkan/VKCommandBuffer.h index ff8eb05b..c487ab30 100644 --- a/example/Vulkan/VKCommandBuffer.h +++ b/example/Vulkan/VKCommandBuffer.h @@ -2,37 +2,30 @@ #define HGL_GRAPH_VULKAN_COMMAND_BUFFER_INCLUDE #include"VK.h" -#include"VKVertexInput.h" - VK_NAMESPACE_BEGIN +class RenderPass; +class Framebuffer; +class Pipeline; +class VertexInput; - class CommandBuffer - { - VkDevice device; - VkCommandPool pool; - VkCommandBuffer buf; +class CommandBuffer +{ + VkDevice device; + VkCommandPool pool; + VkCommandBuffer cmd_buf; - public: + VkClearValue clear_values[2]; + VkRect2D render_area; - CommandBuffer(VkDevice dev,VkCommandPool cp,VkCommandBuffer cb){device=dev;pool=cp;buf=cb;} - ~CommandBuffer(); +public: - bool Bind(VertexInput *vi) - { - if(!vi) - return(false); + CommandBuffer(VkDevice dev,VkCommandPool cp,VkCommandBuffer cb); + ~CommandBuffer(); - const List &buf_list=vi->GetBufferList(); + void SetRenderArea(const VkRect2D &ra){render_area=ra;} - if(buf_list.GetCount()<=0) - return(false); - - constexpr VkDeviceSize zero_offsets[1]={0}; - - vkCmdBindVertexBuffers(buf,0,buf_list.GetCount(),buf_list.GetData(),zero_offsets); - - return(true); - } - };//class CommandBuffer + bool Bind(RenderPass *rp,Framebuffer *fb,Pipeline *p); + bool Bind(VertexInput *vi); +};//class CommandBuffer VK_NAMESPACE_END #endif//HGL_GRAPH_VULKAN_COMMAND_BUFFER_INCLUDE diff --git a/example/Vulkan/VKDevice.cpp b/example/Vulkan/VKDevice.cpp index 30ff1bde..0b14fe7c 100644 --- a/example/Vulkan/VKDevice.cpp +++ b/example/Vulkan/VKDevice.cpp @@ -1,5 +1,9 @@ #include"VKDevice.h" #include +#include"VKBuffer.h" +#include"VKCommandBuffer.h" +//#include"VKDescriptorSet.h" +#include"VKRenderPass.h" VK_NAMESPACE_BEGIN diff --git a/example/Vulkan/VKDevice.h b/example/Vulkan/VKDevice.h index 39627005..94cbcbab 100644 --- a/example/Vulkan/VKDevice.h +++ b/example/Vulkan/VKDevice.h @@ -5,12 +5,13 @@ #include"VK.h" #include"Window.h" #include"VKDeviceAttribute.h" -#include"VKBuffer.h" -#include"VKCommandBuffer.h" -//#include"VKDescriptorSet.h" -#include"VKRenderPass.h" VK_NAMESPACE_BEGIN +struct PhysicalDevice; +class Buffer; +class VertexBuffer; +class CommandBuffer; +class RenderPass; using RefDeviceAttribute=SharedPtr; @@ -41,7 +42,7 @@ public: Buffer * CreateBuffer(VkBufferUsageFlags buf_usage,VkDeviceSize size,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE); VertexBuffer * CreateBuffer(VkBufferUsageFlags buf_usage,VkFormat format,uint32_t count,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE); -#define CREATE_FORMAT_BUFFER_OBJECT(LargeName,type) Buffer *Create##LargeName(VkFormat format,uint32_t count,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE){return CreateBuffer(VK_BUFFER_USAGE_##type##_BUFFER_BIT,format,count,sharing_mode);} +#define CREATE_FORMAT_BUFFER_OBJECT(LargeName,type) VertexBuffer *Create##LargeName(VkFormat format,uint32_t count,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE){return CreateBuffer(VK_BUFFER_USAGE_##type##_BUFFER_BIT,format,count,sharing_mode);} CREATE_FORMAT_BUFFER_OBJECT(VBO,VERTEX) CREATE_FORMAT_BUFFER_OBJECT(IBO,INDEX) #undef CREATE_FORMAT_BUFFER_OBJECT diff --git a/example/Vulkan/VKDeviceAttribute.cpp b/example/Vulkan/VKDeviceAttribute.cpp index 850bc5e4..3af1c170 100644 --- a/example/Vulkan/VKDeviceAttribute.cpp +++ b/example/Vulkan/VKDeviceAttribute.cpp @@ -1,4 +1,5 @@ #include"VKDeviceAttribute.h" +#include"VKPhysicalDevice.h" #include VK_NAMESPACE_BEGIN @@ -169,4 +170,9 @@ DeviceAttribute::~DeviceAttribute() if(surface) vkDestroySurfaceKHR(instance,surface,nullptr); } + +bool DeviceAttribute::CheckMemoryType(uint32_t typeBits,VkFlags requirements_mask,uint32_t *typeIndex) const +{ + return physical_device->CheckMemoryType(typeBits,requirements_mask,typeIndex); +} VK_NAMESPACE_END diff --git a/example/Vulkan/VKDeviceAttribute.h b/example/Vulkan/VKDeviceAttribute.h index e9b79d91..5667209a 100644 --- a/example/Vulkan/VKDeviceAttribute.h +++ b/example/Vulkan/VKDeviceAttribute.h @@ -1,12 +1,13 @@ #pragma once #include"VK.h" -#include"VKPhysicalDevice.h" VK_NAMESPACE_BEGIN constexpr uint32_t ERROR_FAMILY_INDEX=UINT32_MAX; +struct PhysicalDevice; + struct DeviceAttribute { VkInstance instance =nullptr; @@ -52,9 +53,6 @@ public: DeviceAttribute(VkInstance inst,const PhysicalDevice *pd,VkSurfaceKHR s); ~DeviceAttribute(); - bool CheckMemoryType(uint32_t typeBits,VkFlags requirements_mask,uint32_t *typeIndex) const - { - return physical_device->CheckMemoryType(typeBits,requirements_mask,typeIndex); - } + bool CheckMemoryType(uint32_t typeBits,VkFlags requirements_mask,uint32_t *typeIndex) const; };//class DeviceAttribute VK_NAMESPACE_END diff --git a/example/Vulkan/VKDeviceCreater.cpp b/example/Vulkan/VKDeviceCreater.cpp index c5381352..ef507c35 100644 --- a/example/Vulkan/VKDeviceCreater.cpp +++ b/example/Vulkan/VKDeviceCreater.cpp @@ -1,5 +1,6 @@ #include"VKDevice.h" #include"VKInstance.h" +#include"VKPhysicalDevice.h" #include VK_NAMESPACE_BEGIN diff --git a/example/Vulkan/VKFramebuffer.cpp b/example/Vulkan/VKFramebuffer.cpp index 04ca84df..c710c658 100644 --- a/example/Vulkan/VKFramebuffer.cpp +++ b/example/Vulkan/VKFramebuffer.cpp @@ -1,4 +1,6 @@ #include"VKFramebuffer.h" +#include"VKDevice.h" +#include"VKRenderPass.h" VK_NAMESPACE_BEGIN Framebuffer::~Framebuffer() { diff --git a/example/Vulkan/VKFramebuffer.h b/example/Vulkan/VKFramebuffer.h index dd27ebb9..d6afdc02 100644 --- a/example/Vulkan/VKFramebuffer.h +++ b/example/Vulkan/VKFramebuffer.h @@ -2,9 +2,10 @@ #define HGL_GRAPH_VULKAN_FRAMEBUFFER_INCLUDE #include"VK.h" -#include"VKDevice.h" -#include"VKRenderPass.h" VK_NAMESPACE_BEGIN +class Device; +class RenderPass; + class Framebuffer { VkDevice device; @@ -23,6 +24,8 @@ private: public: ~Framebuffer(); + + operator VkFramebuffer(){return frame_buffer;} };//class Framebuffer Framebuffer *CreateFramebuffer(Device *,RenderPass *,VkImageView color,VkImageView depth); diff --git a/example/Vulkan/VKInstance.cpp b/example/Vulkan/VKInstance.cpp index 1c790ba2..1c58eaae 100644 --- a/example/Vulkan/VKInstance.cpp +++ b/example/Vulkan/VKInstance.cpp @@ -1,6 +1,6 @@ #include"VKInstance.h" #include"VKSurfaceExtensionName.h" -#include +#include"VKPhysicalDevice.h" #include VK_NAMESPACE_BEGIN diff --git a/example/Vulkan/VKInstance.h b/example/Vulkan/VKInstance.h index 4f778c1b..60cb2622 100644 --- a/example/Vulkan/VKInstance.h +++ b/example/Vulkan/VKInstance.h @@ -5,9 +5,11 @@ #include #include"Window.h" #include"VK.h" -#include"VKDevice.h" VK_NAMESPACE_BEGIN +struct PhysicalDevice; +class Device; + class Instance { VkInstance inst; diff --git a/example/Vulkan/VKPipeline.cpp b/example/Vulkan/VKPipeline.cpp index 0d19d470..bf284ae9 100644 --- a/example/Vulkan/VKPipeline.cpp +++ b/example/Vulkan/VKPipeline.cpp @@ -1,4 +1,5 @@ #include"VKPipeline.h" +#include"VKDevice.h" #include"VKShader.h" #include"VKVertexInput.h" #include"VKRenderPass.h" diff --git a/example/Vulkan/VKPipeline.h b/example/Vulkan/VKPipeline.h index 26eb37f3..7cf564fa 100644 --- a/example/Vulkan/VKPipeline.h +++ b/example/Vulkan/VKPipeline.h @@ -2,9 +2,9 @@ #define HGL_GRAPH_VULKAN_PIPELINE_INCLUDE #include"VK.h" -#include"VKDevice.h" VK_NAMESPACE_BEGIN +class Device; class RenderPass; class Pipeline diff --git a/example/Vulkan/VKPipelineLayout.cpp b/example/Vulkan/VKPipelineLayout.cpp index b1a333e8..67c5f487 100644 --- a/example/Vulkan/VKPipelineLayout.cpp +++ b/example/Vulkan/VKPipelineLayout.cpp @@ -1,4 +1,5 @@ #include"VKPipelineLayout.h" +#include"VKDescriptorSetLayout.h" VK_NAMESPACE_BEGIN PipelineLayout::~PipelineLayout() diff --git a/example/Vulkan/VKPipelineLayout.h b/example/Vulkan/VKPipelineLayout.h index baf269eb..2019157a 100644 --- a/example/Vulkan/VKPipelineLayout.h +++ b/example/Vulkan/VKPipelineLayout.h @@ -2,8 +2,8 @@ #define HGL_GRAPH_VULKAN_PIPELINE_LAYOUT_INCLUDE #include"VK.h" -#include"VKDescriptorSetLayout.h" VK_NAMESPACE_BEGIN +class DescriptorSetLayout; class PipelineLayout { VkDevice device; diff --git a/example/Vulkan/VKVertexInput.cpp b/example/Vulkan/VKVertexInput.cpp index 8cfd5e2b..b79338f5 100644 --- a/example/Vulkan/VKVertexInput.cpp +++ b/example/Vulkan/VKVertexInput.cpp @@ -1,4 +1,5 @@ #include"VKVertexInput.h" +#include"VKBuffer.h" VK_NAMESPACE_BEGIN bool VertexInput::Add(VertexBuffer *buf,bool instance) diff --git a/example/Vulkan/VKVertexInput.h b/example/Vulkan/VKVertexInput.h index 82e80cc5..be368ca9 100644 --- a/example/Vulkan/VKVertexInput.h +++ b/example/Vulkan/VKVertexInput.h @@ -2,8 +2,9 @@ #define HGL_GRAPH_VULKAN_VERTEX_INPUT_INCLUDE #include"VK.h" -#include"VKBuffer.h" VK_NAMESPACE_BEGIN +class VertexBuffer; + /** * 顶点输入配置,类似于OpenGL的VAB
* 注:本引擎不支持一个BUFFER中包括多种数据 diff --git a/example/Vulkan/main.cpp b/example/Vulkan/main.cpp index 98cc59d1..a4b58fa3 100644 --- a/example/Vulkan/main.cpp +++ b/example/Vulkan/main.cpp @@ -1,11 +1,15 @@ #include"Window.h" #include"VKInstance.h" +#include"VKPhysicalDevice.h" #include"VKDevice.h" +#include"VKBuffer.h" #include"VKShader.h" #include"VKVertexInput.h" #include"VKDescriptorSetLayout.h" +#include"VKRenderPass.h" #include"VKPipelineLayout.h" #include"VKPipeline.h" +#include"VKCommandBuffer.h" #include #include