Toast Engine
Toggle main menu visibility
Loading...
Searching...
No Matches
ray_tracing_scene.hpp
Go to the documentation of this file.
1
6
7
#pragma once
8
9
#include "vulkan_common.hpp"
10
11
#include <cstdint>
12
#include <glm/glm.hpp>
13
#include <optional>
14
#include <vector>
15
16
namespace
renderer {
17
class
VulkanCore
;
18
19
class
RayTracingScene {
20
public
:
21
struct
Instance
{
22
glm::mat4 transform {1.0f};
23
vk::DeviceAddress blas_address = 0;
24
uint32_t custom_index = 0;
25
uint8_t mask = 0xFF;
26
bool
deforming =
false
;
27
};
28
29
RayTracingScene(
const
VulkanCore
& core, uint32_t frames_in_flight);
30
31
void
beginFrame();
32
33
void
addInstance(
const
Instance
& instance);
34
35
void
build(vk::CommandBuffer cmd, uint32_t frame_index,
bool
tracing);
36
37
[[nodiscard]]
38
auto
getAccelerationStructure(uint32_t frame_index)
const
-> vk::AccelerationStructureKHR;
39
41
[[nodiscard]]
42
auto
getAccelerationStructureGeneration
(uint32_t frame_index)
const
-> uint64_t {
43
return
frame_index < m_frames.size() ? m_frames[frame_index].tlas_generation : 0;
44
}
45
46
[[nodiscard]]
47
auto
getInstanceCount() const noexcept -> uint32_t {
48
return
static_cast<
uint32_t
>
(m_instances.size());
49
}
50
51
static
constexpr
uint32_t k_max_instances = 8192;
52
53
static
constexpr
uint32_t k_max_refits_before_rebuild = 240;
54
55
private
:
56
struct
FrameResources
{
57
std::optional<vma::raii::Buffer> instance_buffer;
58
std::optional<vma::raii::Buffer> tlas_buffer;
59
std::optional<vma::raii::Buffer> scratch;
60
vk::raii::AccelerationStructureKHR tlas =
nullptr
;
61
uint64_t tlas_generation = 0;
62
uint32_t built_instances = 0;
63
64
std::vector<Instance> built;
65
uint32_t refits_since_build = 0;
66
};
67
68
const
VulkanCore* m_core =
nullptr
;
69
std::vector<FrameResources> m_frames;
70
std::vector<Instance> m_instances;
71
73
PFN_vkCmdBuildAccelerationStructuresKHR m_build_acceleration_structures =
nullptr
;
74
};
75
76
}
renderer::RayTracingScene::getAccelerationStructureGeneration
auto getAccelerationStructureGeneration(uint32_t frame_index) const -> uint64_t
Bumped whenever the structure of frame_index is recreated since the new one can reuse the old handle ...
Definition
ray_tracing_scene.hpp:42
renderer::VulkanCore
Definition
vulkan_core.hpp:48
FrameResources
Definition
vulkan_common.hpp:13
renderer::RayTracingScene::Instance
Definition
ray_tracing_scene.hpp:21
engine
src
toast
renderer
ray_tracing_scene.hpp
Generated by
1.17.0