diff --git a/include/vkcv/PipelineConfig.hpp b/include/vkcv/PipelineConfig.hpp index 70ef1633d9bacbcc52e6f1f78dabfb450089a79f..c17f04ee6b6bcf9ae011e2fc88d22c90f9e50809 100644 --- a/include/vkcv/PipelineConfig.hpp +++ b/include/vkcv/PipelineConfig.hpp @@ -15,6 +15,7 @@ namespace vkcv { enum class PrimitiveTopology{PointList, LineList, TriangleList }; + enum class CullMode{ None, Front, Back }; struct PipelineConfig { ShaderProgram m_ShaderProgram; @@ -28,6 +29,7 @@ namespace vkcv { PrimitiveTopology m_PrimitiveTopology = PrimitiveTopology::TriangleList; bool m_EnableDepthClamping = false; Multisampling m_multisampling = Multisampling::None; + CullMode m_culling = CullMode::None; }; } \ No newline at end of file diff --git a/projects/voxelization/src/main.cpp b/projects/voxelization/src/main.cpp index a9c899f3a2b481f9dbc102a963488a6cf8a7fa00..59b2d9fb3460ab6f1e9a8b59b9ce422b83c4a87c 100644 --- a/projects/voxelization/src/main.cpp +++ b/projects/voxelization/src/main.cpp @@ -232,8 +232,8 @@ int main(int argc, const char** argv) { core.getDescriptorSet(perMeshDescriptorSets[0]).layout }, true }; - - forwardPipelineConfig.m_multisampling = msaa; + forwardPipelineConfig.m_culling = vkcv::CullMode::Back; + forwardPipelineConfig.m_multisampling = msaa; vkcv::PipelineHandle forwardPipeline = core.createGraphicsPipeline(forwardPipelineConfig); diff --git a/src/vkcv/PipelineManager.cpp b/src/vkcv/PipelineManager.cpp index b1b0827285ffce91b6be3bf20a58cdef7de233b2..621abb0a5659d572b22ce11eb38adeb5e2297a4c 100644 --- a/src/vkcv/PipelineManager.cpp +++ b/src/vkcv/PipelineManager.cpp @@ -143,13 +143,21 @@ namespace vkcv vk::Rect2D scissor({ 0,0 }, { config.m_Width, config.m_Height }); vk::PipelineViewportStateCreateInfo pipelineViewportStateCreateInfo({}, 1, &viewport, 1, &scissor); + 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: throw("Lets tilt Tobi LOLOLOL"); // I hope you review the code well + } + // rasterization state vk::PipelineRasterizationStateCreateInfo pipelineRasterizationStateCreateInfo( {}, config.m_EnableDepthClamping, false, vk::PolygonMode::eFill, - vk::CullModeFlagBits::eNone, + cullMode, vk::FrontFace::eCounterClockwise, false, 0.f,