Program Listing for File Raytracing.hpp
↰ Return to documentation for file (Src/GraphicsEngineVulkan/renderer/Raytracing.hpp
)
#pragma once
#include <vulkan/vulkan.h>
#include "renderer/pushConstants/PushConstantRayTracing.hpp"
#include "vulkan_base/VulkanBuffer.hpp"
#include "vulkan_base/VulkanSwapChain.hpp"
namespace Kataglyphis::VulkanRendererInternals {
class Raytracing
{
public:
Raytracing();
void init(VulkanDevice *device, const std::vector<VkDescriptorSetLayout> &descriptorSetLayouts);
void shaderHotReload(const std::vector<VkDescriptorSetLayout> &descriptor_set_layouts);
void recordCommands(VkCommandBuffer &commandBuffer,
VulkanSwapChain *vulkanSwapChain,
const std::vector<VkDescriptorSet> &descriptorSets);
void cleanUp();
~Raytracing();
private:
VulkanDevice *device{ VK_NULL_HANDLE };
VulkanSwapChain *vulkanSwapChain{ VK_NULL_HANDLE };
VkPipeline graphicsPipeline{ VK_NULL_HANDLE };
VkPipelineLayout pipeline_layout{ VK_NULL_HANDLE };
PushConstantRaytracing pc{ glm::vec4(0.f) };
VkPushConstantRange pc_ranges{ VK_SHADER_STAGE_FLAG_BITS_MAX_ENUM, 0, 0 };
std::vector<VkRayTracingShaderGroupCreateInfoKHR> shader_groups;
VulkanBuffer shaderBindingTableBuffer;
VulkanBuffer raygenShaderBindingTableBuffer;
VulkanBuffer missShaderBindingTableBuffer;
VulkanBuffer hitShaderBindingTableBuffer;
VkStridedDeviceAddressRegionKHR rgen_region{};
VkStridedDeviceAddressRegionKHR miss_region{};
VkStridedDeviceAddressRegionKHR hit_region{};
VkStridedDeviceAddressRegionKHR call_region{};
VkPhysicalDeviceRayTracingPipelinePropertiesKHR raytracing_properties{};
void createPCRange();
void createGraphicsPipeline(const std::vector<VkDescriptorSetLayout> &descriptorSetLayouts);
void createSBT();
};
}// namespace Kataglyphis::VulkanRendererInternals