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"
11#include <vulkan/vulkan.h>
24 inline virtual std::string_view
GetTypeName()
const override {
return "Top-Level AS"; }
29 virtual void UpdateLean(VkCommandBuffer cmdBuffer, uint32_t frameIndex);
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
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.
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