From 152a7853929e2059f06127d1c67963ab7de34346 Mon Sep 17 00:00:00 2001 From: HuYingzhuo Date: Fri, 19 Apr 2019 12:11:16 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0primitive=E9=87=8D=E5=AE=9A?= =?UTF-8?q?=E4=B9=89=EF=BC=8C=E4=BD=BF=E4=BB=A3=E7=A0=81=E5=86=99=E8=B5=B7?= =?UTF-8?q?=E6=9D=A5=E6=9B=B4=E6=96=B9=E4=BE=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- example/Vulkan/CMakeLists.txt | 1 + example/Vulkan/VK.h | 2 ++ example/Vulkan/VKPipeline.cpp | 5 +++-- example/Vulkan/VKPipeline.h | 1 - example/Vulkan/VKPrimivate.h | 22 ++++++++++++++++++++++ example/Vulkan/main.cpp | 6 +++--- 6 files changed, 31 insertions(+), 6 deletions(-) create mode 100644 example/Vulkan/VKPrimivate.h diff --git a/example/Vulkan/CMakeLists.txt b/example/Vulkan/CMakeLists.txt index 37980a82..93b0c440 100644 --- a/example/Vulkan/CMakeLists.txt +++ b/example/Vulkan/CMakeLists.txt @@ -26,6 +26,7 @@ SET(VULKAN_TEST_SOURCE_FILES main.cpp ) SET(VULKAN_TEST_HEADER_FILES VK.h + VKPrimivate.h VKInstance.h VKPhysicalDevice.h VKCommandBuffer.h diff --git a/example/Vulkan/VK.h b/example/Vulkan/VK.h index 5953810c..81110f7c 100644 --- a/example/Vulkan/VK.h +++ b/example/Vulkan/VK.h @@ -4,12 +4,14 @@ #include #include #include +#include"VKPrimivate.h" #define VK_NAMESPACE hgl::graph::vulkan #define VK_NAMESPACE_BEGIN namespace hgl{namespace graph{namespace vulkan{ #define VK_NAMESPACE_END }}} VK_NAMESPACE_BEGIN + using CharPointerList=hgl::List; #ifdef _DEBUG diff --git a/example/Vulkan/VKPipeline.cpp b/example/Vulkan/VKPipeline.cpp index bf284ae9..b24cc4b3 100644 --- a/example/Vulkan/VKPipeline.cpp +++ b/example/Vulkan/VKPipeline.cpp @@ -100,10 +100,11 @@ bool PipelineCreater::Set(const VertexInput *vi) bool PipelineCreater::Set(const VkPrimitiveTopology topology,bool restart) { - if(topologyVK_PRIMITIVE_TOPOLOGY_END_RANGE)return(false); + if(topologyVK_PRIMITIVE_TOPOLOGY_END_RANGE) + if(topology!=PRIM_RECTANGLE)return(false); inputAssembly.sType = VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO; - inputAssembly.topology = topology; + inputAssembly.topology = (topology==PRIM_RECTANGLE?VK_PRIMITIVE_TOPOLOGY_POINT_LIST:topology); inputAssembly.primitiveRestartEnable = restart; pipelineInfo.pInputAssemblyState = &inputAssembly; diff --git a/example/Vulkan/VKPipeline.h b/example/Vulkan/VKPipeline.h index 73cc7e03..7cf564fa 100644 --- a/example/Vulkan/VKPipeline.h +++ b/example/Vulkan/VKPipeline.h @@ -50,7 +50,6 @@ private: public: - PipelineCreater(Device *dev); ~PipelineCreater()=default; diff --git a/example/Vulkan/VKPrimivate.h b/example/Vulkan/VKPrimivate.h new file mode 100644 index 00000000..fac7a907 --- /dev/null +++ b/example/Vulkan/VKPrimivate.h @@ -0,0 +1,22 @@ +#ifndef HGL_GRAPH_VULKAN_PRIMITIVE_INCLUDE +#define HGL_GRAPH_VULKAN_PRIMITIVE_INCLUDE + +#include + +#define PRIM_POINTS VK_PRIMITIVE_TOPOLOGY_POINT_LIST ///<点 +#define PRIM_LINES VK_PRIMITIVE_TOPOLOGY_LINE_LIST ///<线 +#define PRIM_LINE_STRIP VK_PRIMITIVE_TOPOLOGY_LINE_STRIP ///<连续线 +#define PRIM_TRIANGLES VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST ///<三角形 +#define PRIM_TRIANGLE_STRIP VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP ///<三角形条 +#define PRIM_TRIANGLE_FAN VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN ///<扇形 +#define PRIM_LINES_ADJ VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY ///<代表一个有四个顶点的Primitive,其中第二个点与第三个点会形成线段,而第一个点与第四个点则用来提供2,3邻近点的信息. +#define PRIM_LINE_STRIP_ADJ VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY ///<与LINES_ADJACENCY类似,第一个点跟最后一个点提供信息,剩下的点则跟Line Strip一样形成线段. +#define PRIM_TRIANGLES_ADJ VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY ///<代表一个有六个顶点的Primitive,其中第1,3,5个顶点代表一个Triangle,而地2,4,6个点提供邻近信息.(由1起算) +#define PRIM_TRIANGLE_STRIP_ADJ VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY ///<4+2N个Vertices代表N个Primitive,其中1,3,5,7,9...代表原本的Triangle strip形成Triangle,而2,4,6,8,10...代表邻近提供信息的点.(由1起算) +#define PRIM_PATCHS VK_PRIMITIVE_TOPOLOGY_PATCH_LIST +#define PRIM_RECTANGLE 0x100 ///<矩形(并非原生支持。实现在以画点形式在每个点的Position中传递Left,Top,Width,Height。在Geometry Shader中将转换为2个三角形。用于2D游戏) +#define PRIM_BEGIN VK_PRIMITIVE_TOPOLOGY_BEGIN_RANGE +#define PRIM_END VK_PRIMITIVE_TOPOLOGY_END_RANGE +#define PRIM_RANGE VK_PRIMITIVE_TOPOLOGY_RANGE_SIZE + +#endif//HGL_GRAPH_VULKAN_PRIMITIVE_INCLUDE diff --git a/example/Vulkan/main.cpp b/example/Vulkan/main.cpp index a4b58fa3..ecb1160a 100644 --- a/example/Vulkan/main.cpp +++ b/example/Vulkan/main.cpp @@ -5,7 +5,7 @@ #include"VKBuffer.h" #include"VKShader.h" #include"VKVertexInput.h" -#include"VKDescriptorSetLayout.h" +#include"VKDescriptorSets.h" #include"VKRenderPass.h" #include"VKPipelineLayout.h" #include"VKPipeline.h" @@ -124,13 +124,13 @@ int main(int,char **) vulkan::PipelineCreater pc(device); vulkan::RenderPass *rp=device->CreateRenderPass(); - vulkan::DescriptorSetLayoutCreater dslc(device->GetDevice()); + vulkan::DescriptorSetLayoutCreater dslc(device); vulkan::DescriptorSetLayout *dsl=dslc.Create(); vulkan::PipelineLayout *pl=CreatePipelineLayout(device->GetDevice(),dsl); pc.Set(shader); pc.Set(&vi); - pc.Set(VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST); + pc.Set(PRIM_TRIANGLES); pc.Set(*pl); pc.Set(*rp);