From 8a2fa49ad299c7a2ee7b0ee302e85fe058292f52 Mon Sep 17 00:00:00 2001
From: Mark Oliver Mints <mmints@uni-koblenz.de>
Date: Tue, 10 Aug 2021 17:37:15 +0200
Subject: [PATCH] [#71] Refactor: implement a create function for Pipeline
 Rasterization State Create Info Struct

---
 src/vkcv/PipelineManager.cpp | 85 ++++++++++++++++++++----------------
 src/vkcv/PipelineManager.hpp | 16 ++++++-
 2 files changed, 62 insertions(+), 39 deletions(-)

diff --git a/src/vkcv/PipelineManager.cpp b/src/vkcv/PipelineManager.cpp
index e536895d..66854f30 100644
--- a/src/vkcv/PipelineManager.cpp
+++ b/src/vkcv/PipelineManager.cpp
@@ -258,45 +258,9 @@ namespace vkcv
         vk::PipelineViewportStateCreateInfo pipelineViewportStateCreateInfo =
                 createPipelineViewportStateCreateInfo(config);
 
-        vk::CullModeFlags cullMode;
-        switch (config.m_culling) {
-            case CullMode::None:
-                cullMode = vk::CullModeFlagBits::eNone;
-                break;
-            case CullMode::Front:
-                cullMode = vk::CullModeFlagBits::eFront;
-                break;
-            case CullMode::Back:
-                cullMode = vk::CullModeFlagBits::eBack;
-                break;
-            default:
-                vkcv_log(LogLevel::ERROR, "Unknown CullMode");
-                cullMode = vk::CullModeFlagBits::eNone;
-        }
-
         // rasterization state
-        vk::PipelineRasterizationStateCreateInfo pipelineRasterizationStateCreateInfo(
-                {},
-                config.m_EnableDepthClamping,
-                false,
-                vk::PolygonMode::eFill,
-                cullMode,
-                vk::FrontFace::eCounterClockwise,
-                false,
-                0.f,
-                0.f,
-                0.f,
-                1.f
-        );
-
-        vk::PipelineRasterizationConservativeStateCreateInfoEXT conservativeRasterization;
-        if (config.m_UseConservativeRasterization) {
-            conservativeRasterization = vk::PipelineRasterizationConservativeStateCreateInfoEXT(
-                    {},
-                    vk::ConservativeRasterizationModeEXT::eOverestimate,
-                    0.f);
-            pipelineRasterizationStateCreateInfo.pNext = &conservativeRasterization;
-        }
+        vk::PipelineRasterizationStateCreateInfo pipelineRasterizationStateCreateInfo =
+                createPipelineRasterizationStateCreateInfo(config);
 
         // multisample state
         vk::PipelineMultisampleStateCreateInfo pipelineMultisampleStateCreateInfo(
@@ -613,4 +577,49 @@ namespace vkcv
                                                                             &scissor);
         return pipelineViewportStateCreateInfo;
     }
+
+    vk::PipelineRasterizationStateCreateInfo
+    PipelineManager::createPipelineRasterizationStateCreateInfo(const PipelineConfig &config) {
+
+        vk::CullModeFlags cullMode;
+        switch (config.m_culling) {
+            case CullMode::None:
+                cullMode = vk::CullModeFlagBits::eNone;
+                break;
+            case CullMode::Front:
+                cullMode = vk::CullModeFlagBits::eFront;
+                break;
+            case CullMode::Back:
+                cullMode = vk::CullModeFlagBits::eBack;
+                break;
+            default:
+            vkcv_log(LogLevel::ERROR, "Unknown CullMode");
+                cullMode = vk::CullModeFlagBits::eNone;
+        }
+
+        vk::PipelineRasterizationStateCreateInfo pipelineRasterizationStateCreateInfo (
+                {},
+                config.m_EnableDepthClamping,
+                false,
+                vk::PolygonMode::eFill,
+                cullMode,
+                vk::FrontFace::eCounterClockwise,
+                false,
+                0.f,
+                0.f,
+                0.f,
+                1.f
+        );
+
+        vk::PipelineRasterizationConservativeStateCreateInfoEXT conservativeRasterization;
+        if (config.m_UseConservativeRasterization) {
+            conservativeRasterization = vk::PipelineRasterizationConservativeStateCreateInfoEXT(
+                    {},
+                    vk::ConservativeRasterizationModeEXT::eOverestimate,
+                    0.f);
+            pipelineRasterizationStateCreateInfo.pNext = &conservativeRasterization;
+        }
+
+        return pipelineRasterizationStateCreateInfo;
+    }
 }
diff --git a/src/vkcv/PipelineManager.hpp b/src/vkcv/PipelineManager.hpp
index 0e80b02e..18dd5b99 100644
--- a/src/vkcv/PipelineManager.hpp
+++ b/src/vkcv/PipelineManager.hpp
@@ -82,10 +82,24 @@ namespace vkcv
         vk::PipelineInputAssemblyStateCreateInfo createPipelineInputAssemblyStateCreateInfo(const PipelineConfig &config);
 
         /**
-         * Create a Pipeline Viewport State Create Info Struct with default set viewport and scissor settings
+         * Create a Pipeline Viewport State Create Info Struct with default set viewport and scissor settings.
          * @param config provides with and height of the output window
          * @return Pipeline Viewport State Create Info Struct
          */
         vk::PipelineViewportStateCreateInfo createPipelineViewportStateCreateInfo(const PipelineConfig &config);
+
+        /**
+         * Create a Pipeline Rasterization State Create Info Struct with default values set to:
+         * Rasterizer Discard: Disabled
+         * Polygon Mode: Fill
+         * Front Face: Counter Clockwise
+         * Depth Bias: Disabled
+         * Line Width: 1.0
+         * Depth Clamping and Culling Mode ist set by the Pipeline Config
+         * @param config sets Depth Clamping and Culling Mode
+         * @return Pipeline Rasterization State Create Info Struct
+         */
+        vk::PipelineRasterizationStateCreateInfo createPipelineRasterizationStateCreateInfo(const PipelineConfig &config);
+
     };
 }
-- 
GitLab