Foray Library
rapid prototyping framework for crossplatform development of vulkan hardware ray tracing applications
Loading...
Searching...
No Matches
foray_tlas.hpp
Go to the documentation of this file.
1#pragma once
2#include "../core/foray_managedresource.hpp"
3#include "../foray_basics.hpp"
4#include "../scene/foray_component.hpp"
5#include "../scene/foray_scene_declares.hpp"
6#include "../util/foray_dualbuffer.hpp"
10#include <map>
11#include <vulkan/vulkan.h>
12
13namespace foray::as {
14
15
19 {
20 public:
21 Tlas() = default;
22 virtual ~Tlas() { Destroy(); }
23
24 inline virtual std::string_view GetTypeName() const override { return "Top-Level AS"; }
25
27 virtual void CreateOrUpdate(core::Context* context = nullptr);
29 virtual void UpdateLean(VkCommandBuffer cmdBuffer, uint32_t frameIndex);
30
31 inline virtual bool Exists() const override { return !!mAccelerationStructure; }
32 virtual void Destroy() override;
33
34 FORAY_GETTER_V(AccelerationStructure)
35 FORAY_GETTER_CR(TlasMemory)
36 FORAY_GETTER_V(TlasAddress)
37 FORAY_GETTER_CR(MetaBuffer)
38 FORAY_GETTER_V(Dirty)
39
40 operator VkAccelerationStructureKHR() { return mAccelerationStructure; }
41
44 void RemoveBlasInstance(uint64_t id);
46 const BlasInstance* GetBlasInstance(uint64_t id) const;
52 uint64_t AddBlasInstanceAnimated(const Blas& blas, BlasInstance::TransformUpdateFunc getUpdatedGlobalTransformFunc);
55 uint64_t AddBlasInstanceStatic(const Blas& blas, const glm::mat4& transform);
56
60
61 FORAY_GETTER_CR(AnimatedBlasInstances)
62 FORAY_GETTER_CR(StaticBlasInstances)
63
64 protected:
66 bool mDirty = false;
67 VkAccelerationStructureKHR mAccelerationStructure = nullptr;
71 VkDeviceAddress mTlasAddress = 0;
72 std::map<uint64_t, BlasInstance> mAnimatedBlasInstances;
73 std::map<uint64_t, BlasInstance> mStaticBlasInstances;
74 uint64_t mNextId = 0;
76 };
77} // namespace foray::as
A reference to a BLAS maintained by the TLAS.
Definition foray_blasinstance.hpp:11
std::function< void(glm::mat4 &)> TransformUpdateFunc
Function template used for updating the transform matrix of animated instances.
Definition foray_blasinstance.hpp:14
A Blas (Bottom Level Acceleration Structure) is the raytracing equivalent concept of a mesh.
Definition foray_blas.hpp:15
Device local buffer maintaining GeometryMeta structs for all primitives/geometries for multiple BLAS.
Definition foray_geometrymetabuffer.hpp:53
Describes a top level accerlation structure. A tlas usually holds multiple Blas. A blas is an object/...
Definition foray_tlas.hpp:19
virtual void CreateOrUpdate(core::Context *context=nullptr)
(Re)creates the TLAS. Required to invoke when changes to the TLAS transitioned it to Dirty state....
virtual std::string_view GetTypeName() const override
Return a hint for the type of resource managed by the instantiation.
Definition foray_tlas.hpp:24
uint64_t AddBlasInstanceAnimated(const Blas &blas, BlasInstance::TransformUpdateFunc getUpdatedGlobalTransformFunc)
Add an animated BLAS instance.
virtual void UpdateLean(VkCommandBuffer cmdBuffer, uint32_t frameIndex)
Updates transforms only. TLAS rebuild is performed and synchronized on GPU only. TLAS must by non-Dir...
uint64_t AddBlasInstanceAuto(scene::ncomp::MeshInstance *meshInstance)
Add a BLAS instance from meshInstance component.
Tlas()=default
core::Context * mContext
Definition foray_tlas.hpp:65
VkAccelerationStructureKHR mAccelerationStructure
Definition foray_tlas.hpp:67
bool mDirty
Definition foray_tlas.hpp:66
virtual ~Tlas()
Definition foray_tlas.hpp:22
VkDeviceAddress mTlasAddress
Definition foray_tlas.hpp:71
std::map< uint64_t, BlasInstance > mStaticBlasInstances
Definition foray_tlas.hpp:73
const BlasInstance * GetBlasInstance(uint64_t id) const
Get A BLAS instance by id.
void ClearBlasInstances()
Clear all instances.
core::ManagedBuffer mScratchBuffer
Definition foray_tlas.hpp:70
std::map< uint64_t, BlasInstance > mAnimatedBlasInstances
Definition foray_tlas.hpp:72
virtual bool Exists() const override
Return true, if the managed resource is allocated.
Definition foray_tlas.hpp:31
uint64_t mNextId
Definition foray_tlas.hpp:74
util::DualBuffer mInstanceBuffer
Definition foray_tlas.hpp:69
uint64_t AddBlasInstanceStatic(const Blas &blas, const glm::mat4 &transform)
Add a static BLAS instance.
void RemoveBlasInstance(uint64_t id)
Remove a BLAS instance.
virtual void Destroy() override
Destroy the resource.
GeometryMetaBuffer mMetaBuffer
Definition foray_tlas.hpp:75
core::ManagedBuffer mTlasMemory
Definition foray_tlas.hpp:68
Wraps allocation and lifetime functionality of a VkBuffer.
Definition foray_managedbuffer.hpp:12
Base class enforcing common interface for all classes wrapping a device resource.
Definition foray_managedresource.hpp:11
Defines an instance of a mesh.
Definition foray_meshinstance.hpp:9
Helper class for organizing CPU -> GPU data synchronisation. In flight data is stored on host side,...
Definition foray_dualbuffer.hpp:18
#define FORAY_GETTER_V(member)
Return value.
Definition foray_basics.hpp:39
#define FORAY_GETTER_CR(member)
Return constant reference.
Definition foray_basics.hpp:60
Definition foray_as_declares.hpp:3
Non owning context object.
Definition foray_context.hpp:16