From 8f4b9f593cba4491f6859639b5624c2c14385423 Mon Sep 17 00:00:00 2001 From: redstrate <54911369+redstrate@users.noreply.github.com> Date: Sun, 7 Feb 2021 16:37:38 -0500 Subject: [PATCH] Support all culling and winding modes on Vulkan --- engine/gfx/vulkan/src/gfx_vulkan.cpp | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/engine/gfx/vulkan/src/gfx_vulkan.cpp b/engine/gfx/vulkan/src/gfx_vulkan.cpp index cd60a73..5291022 100755 --- a/engine/gfx/vulkan/src/gfx_vulkan.cpp +++ b/engine/gfx/vulkan/src/gfx_vulkan.cpp @@ -785,15 +785,30 @@ GFXPipeline* GFXVulkan::create_graphics_pipeline(const GFXGraphicsPipelineCreate rasterizer.sType = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO; rasterizer.polygonMode = VK_POLYGON_MODE_FILL; rasterizer.lineWidth = 1.0f; - rasterizer.cullMode = VK_CULL_MODE_NONE; - rasterizer.frontFace = VK_FRONT_FACE_CLOCKWISE; + + switch (info.rasterization.culling_mode) { + case GFXCullingMode::Backface: + rasterizer.cullMode = VK_CULL_MODE_BACK_BIT; + break; + case GFXCullingMode::Frontface: + rasterizer.cullMode = VK_CULL_MODE_FRONT_BIT; + break; + case GFXCullingMode::None: + rasterizer.cullMode = VK_CULL_MODE_NONE; + } + + switch (info.rasterization.winding_mode) { + case GFXWindingMode::Clockwise: + rasterizer.frontFace = VK_FRONT_FACE_CLOCKWISE; + break; + case GFXWindingMode::CounterClockwise: + rasterizer.frontFace = VK_FRONT_FACE_COUNTER_CLOCKWISE; + break; + } if (info.rasterization.polygon_type == GFXPolygonType::Line) rasterizer.polygonMode = VK_POLYGON_MODE_LINE; - if (info.rasterization.culling_mode == GFXCullingMode::Backface) { - rasterizer.cullMode = VK_CULL_MODE_BACK_BIT; - } VkPipelineMultisampleStateCreateInfo multisampling = {}; multisampling.sType = VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO;