diff --git a/include/vkcv/PipelineConfig.hpp b/include/vkcv/PipelineConfig.hpp index 1e00c5209118469a7dc6ff1eb1e3c98a3c6903a7..db9a592334044bfa5854aa3e06451bc8850cf748 100644 --- a/include/vkcv/PipelineConfig.hpp +++ b/include/vkcv/PipelineConfig.hpp @@ -25,6 +25,7 @@ namespace vkcv { bool m_UseDynamicViewport; bool m_UseConservativeRasterization = false; PrimitiveTopology m_PrimitiveTopology = PrimitiveTopology::TriangleList; + bool m_EnableDepthClamping = false; }; } \ No newline at end of file diff --git a/projects/voxelization/src/ShadowMapping.cpp b/projects/voxelization/src/ShadowMapping.cpp index 25d760b42461b9daf326ef5c0bad228b30976c15..5e4901e56a2633c4ec49448186832e87bcb90b7f 100644 --- a/projects/voxelization/src/ShadowMapping.cpp +++ b/projects/voxelization/src/ShadowMapping.cpp @@ -30,7 +30,7 @@ ShadowMapping::ShadowMapping(vkcv::Core* corePtr, const vkcv::VertexLayout& vert }; const vkcv::PassConfig shadowPassConfig(shadowAttachments); m_shadowMapPass = corePtr->createPass(shadowPassConfig); - const vkcv::PipelineConfig shadowPipeConfig{ + vkcv::PipelineConfig shadowPipeConfig{ shadowShader, shadowMapResolution, shadowMapResolution, @@ -39,6 +39,7 @@ ShadowMapping::ShadowMapping(vkcv::Core* corePtr, const vkcv::VertexLayout& vert {}, false }; + shadowPipeConfig.m_EnableDepthClamping = true; m_shadowMapPipe = corePtr->createGraphicsPipeline(shadowPipeConfig); // shadow map @@ -56,7 +57,8 @@ void ShadowMapping::recordShadowMapRendering( const glm::vec3& lightColor, const float lightStrength, const std::vector<vkcv::Mesh>& meshes, - const std::vector<glm::mat4>& modelMatrices) { + const std::vector<glm::mat4>& modelMatrices, + const vkcv::camera::Camera& camera) { LightInfo lightInfo; lightInfo.sunColor = lightColor; diff --git a/projects/voxelization/src/ShadowMapping.hpp b/projects/voxelization/src/ShadowMapping.hpp index 0b7a12cd995147521afec30fb0d3dfb643078e66..295dbae319beb222c96538c359debef7583f4045 100644 --- a/projects/voxelization/src/ShadowMapping.hpp +++ b/projects/voxelization/src/ShadowMapping.hpp @@ -1,5 +1,6 @@ #pragma once #include <vkcv/core.hpp> +#include <vkcv/camera/Camera.hpp> #define GLM_DEPTH_ZERO_TO_ONE #define GLM_FORCE_LEFT_HANDED @@ -24,7 +25,8 @@ public: const glm::vec3& lightColor, const float lightStrength, const std::vector<vkcv::Mesh>& meshes, - const std::vector<glm::mat4>& modelMatrices); + const std::vector<glm::mat4>& modelMatrices, + const vkcv::camera::Camera& camera); vkcv::ImageHandle getShadowMap(); vkcv::SamplerHandle getShadowSampler(); diff --git a/projects/voxelization/src/main.cpp b/projects/voxelization/src/main.cpp index 62a1bc6f6c40799f45db13c952e64f0bd2738359..d86b8297c8206ce02030bbfcd9f4c53abfe92844 100644 --- a/projects/voxelization/src/main.cpp +++ b/projects/voxelization/src/main.cpp @@ -374,7 +374,8 @@ int main(int argc, const char** argv) { lightColor, lightStrength, meshes, - modelMatrices); + modelMatrices, + cameraManager.getActiveCamera()); // voxelization voxelization.setVoxelExtent(voxelizationExtent); diff --git a/src/vkcv/Context.cpp b/src/vkcv/Context.cpp index ac133d1affc81702ee1a19b3f66810e606bec58d..e23213b41a3c9a289b679652b66bbe2e75cf0340 100644 --- a/src/vkcv/Context.cpp +++ b/src/vkcv/Context.cpp @@ -280,6 +280,7 @@ namespace vkcv vk::PhysicalDeviceFeatures deviceFeatures; deviceFeatures.fragmentStoresAndAtomics = true; deviceFeatures.geometryShader = true; + deviceFeatures.depthClamp = true; deviceCreateInfo.pEnabledFeatures = &deviceFeatures; // Ablauf diff --git a/src/vkcv/PipelineManager.cpp b/src/vkcv/PipelineManager.cpp index df36442efc2992bf16b6e82245ef9753dad95e5d..5ac2d9781a1bdfa36cd89f76b202b2028deb4d8d 100644 --- a/src/vkcv/PipelineManager.cpp +++ b/src/vkcv/PipelineManager.cpp @@ -146,7 +146,7 @@ namespace vkcv // rasterization state vk::PipelineRasterizationStateCreateInfo pipelineRasterizationStateCreateInfo( {}, - false, + config.m_EnableDepthClamping, false, vk::PolygonMode::eFill, vk::CullModeFlagBits::eNone,