.. _program_listing_file_Src_GraphicsEngineVulkan_renderer_accelerationStructures_ASManager.hpp: Program Listing for File ASManager.hpp ====================================== |exhale_lsh| :ref:`Return to documentation for file ` (``Src/GraphicsEngineVulkan/renderer/accelerationStructures/ASManager.hpp``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp #pragma once #include #include "BottomLevelAccelerationStructure.hpp" #include "TopLevelAccelerationStructure.hpp" #include "renderer/CommandBufferManager.hpp" #include "scene/Scene.hpp" #include "vulkan_base/VulkanDevice.hpp" namespace Kataglyphis::VulkanRendererInternals { struct BuildAccelerationStructure { VkAccelerationStructureBuildGeometryInfoKHR build_info; VkAccelerationStructureBuildSizesInfoKHR size_info; const VkAccelerationStructureBuildRangeInfoKHR *range_info; BottomLevelAccelerationStructure single_blas; }; struct BlasInput { std::vector as_geometry; std::vector as_build_offset_info; }; class ASManager { public: ASManager(); VkAccelerationStructureKHR &getTLAS() { return tlas.vulkanAS; }; void createASForScene(VulkanDevice *device, VkCommandPool commandPool, Scene *scene); void createBLAS(VulkanDevice *device, VkCommandPool commandPool, Scene *scene); void createTLAS(VulkanDevice *device, VkCommandPool commandPool, Scene *scene); void cleanUp(); ~ASManager(); private: VulkanDevice *vulkanDevice{ VK_NULL_HANDLE }; Kataglyphis::VulkanRendererInternals::CommandBufferManager commandBufferManager; VulkanBufferManager vulkanBufferManager; std::vector blas; TopLevelAccelerationStructure tlas; void createSingleBlas(VulkanDevice *device, VkCommandBuffer command_buffer, BuildAccelerationStructure &build_as_structure, VkDeviceAddress scratch_device_or_host_address); void createAccelerationStructureInfosBLAS(VulkanDevice *device, BuildAccelerationStructure &build_as_structure, BlasInput &blas_input, VkDeviceSize ¤t_scretch_size, VkDeviceSize ¤t_size); void objectToVkGeometryKHR(VulkanDevice *device, Mesh *mesh, VkAccelerationStructureGeometryKHR &acceleration_structure_geometry, VkAccelerationStructureBuildRangeInfoKHR &acceleration_structure_build_range_info); }; }// namespace Kataglyphis::VulkanRendererInternals