
.. _program_listing_file_Src_GraphicsEngineVulkan_renderer_Raytracing.ixx:

Program Listing for File Raytracing.ixx
=======================================

|exhale_lsh| :ref:`Return to documentation for file <file_Src_GraphicsEngineVulkan_renderer_Raytracing.ixx>` (``Src/GraphicsEngineVulkan/renderer/Raytracing.ixx``)

.. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS

.. code-block:: cpp

   module;
   
   #include "renderer/pushConstants/PushConstantRayTracing.hpp"
   #include <glm/glm.hpp>
   #include <vector>
   #include <vulkan/vulkan.hpp>
   
   export module kataglyphis.vulkan.raytracing;
   
   import kataglyphis.vulkan.device;
   import kataglyphis.vulkan.buffer;
   import kataglyphis.vulkan.image;
   import kataglyphis.vulkan.swapchain;
   
   export namespace Kataglyphis::VulkanRendererInternals {
   class Raytracing
   {
     public:
       Raytracing();
   
       void init(VulkanDevice *in_device, const std::vector<vk::DescriptorSetLayout> &descriptorSetLayouts,
         VulkanSwapChain *swapchain);
   
       void shaderHotReload(const std::vector<vk::DescriptorSetLayout> &descriptor_set_layouts);
   
       void recordCommands(vk::CommandBuffer &commandBuffer,
         VulkanImage &renderImage,
         VulkanSwapChain *vulkanSwapChain,
         const std::vector<vk::DescriptorSet> &descriptorSets);
   
       void cleanUp();
   
       ~Raytracing();
   
     private:
       VulkanDevice *device{ nullptr };
       [[maybe_unused]] VulkanSwapChain *vulkanSwapChain{ nullptr };
   
       vk::Pipeline graphicsPipeline{};
       vk::PipelineLayout pipeline_layout{};
       PushConstantRaytracing pc{ glm::vec4(0.f) };
       vk::PushConstantRange pc_ranges{ vk::ShaderStageFlagBits::eAll, 0, 0 };
   
       std::vector<vk::RayTracingShaderGroupCreateInfoKHR> shader_groups;
       VulkanBuffer shaderBindingTableBuffer;
       VulkanBuffer raygenShaderBindingTableBuffer;
       VulkanBuffer missShaderBindingTableBuffer;
       VulkanBuffer hitShaderBindingTableBuffer;
   
       vk::StridedDeviceAddressRegionKHR rgen_region{};
       vk::StridedDeviceAddressRegionKHR miss_region{};
       vk::StridedDeviceAddressRegionKHR hit_region{};
       vk::StridedDeviceAddressRegionKHR call_region{};
   
       vk::PhysicalDeviceRayTracingPipelinePropertiesKHR raytracing_properties{};
   
       void createPCRange();
       void createGraphicsPipeline(const std::vector<vk::DescriptorSetLayout> &descriptorSetLayouts);
       void createSBT();
   };
   }// namespace Kataglyphis::VulkanRendererInternals
