Foray Library
rapid prototyping framework for crossplatform development of vulkan hardware ray tracing applications
Loading...
Searching...
No Matches
Public Member Functions | Protected Attributes | List of all members
foray::as::Tlas Class Reference

Describes a top level accerlation structure. A tlas usually holds multiple Blas. A blas is an object/mesh instance together with its transformation in 3d space. More...

#include <foray_tlas.hpp>

Inheritance diagram for foray::as::Tlas:
foray::core::ManagedResource foray::NoMoveDefaults

Public Member Functions

 Tlas ()=default
 
virtual ~Tlas ()
 
virtual std::string_view GetTypeName () const override
 Return a hint for the type of resource managed by the instantiation.
 
virtual void CreateOrUpdate (core::Context *context=nullptr)
 (Re)creates the TLAS. Required to invoke when changes to the TLAS transitioned it to Dirty state. Will synchronize with the CPU.
 
virtual void UpdateLean (VkCommandBuffer cmdBuffer, uint32_t frameIndex)
 Updates transforms only. TLAS rebuild is performed and synchronized on GPU only. TLAS must by non-Dirty!
 
virtual bool Exists () const override
 Return true, if the managed resource is allocated.
 
virtual void Destroy () override
 Destroy the resource.
 
 operator VkAccelerationStructureKHR ()
 
void RemoveBlasInstance (uint64_t id)
 Remove a BLAS instance.
 
const BlasInstanceGetBlasInstance (uint64_t id) const
 Get A BLAS instance by id.
 
uint64_t AddBlasInstanceAuto (scene::ncomp::MeshInstance *meshInstance)
 Add a BLAS instance from meshInstance component.
 
uint64_t AddBlasInstanceAnimated (const Blas &blas, BlasInstance::TransformUpdateFunc getUpdatedGlobalTransformFunc)
 Add an animated BLAS instance.
 
uint64_t AddBlasInstanceStatic (const Blas &blas, const glm::mat4 &transform)
 Add a static BLAS instance.
 
void ClearBlasInstances ()
 Clear all instances.
 
- Public Member Functions inherited from foray::core::ManagedResource
 ManagedResource ()
 Default constructor registers the resource.
 
 ManagedResource (std::string_view name)
 Registers the resource and sets its name.
 
virtual ~ManagedResource ()
 Unregisters the resource.
 
std::string_view GetName () const
 Return a custom name for the object.
 
virtual void SetName (std::string_view name)
 Set a custom name for the object.
 
std::string Print () const
 Print name and type in one string.
 
- Public Member Functions inherited from foray::NoMoveDefaults
 NoMoveDefaults ()=default
 
 NoMoveDefaults (const NoMoveDefaults &other)=delete
 
 NoMoveDefaults (NoMoveDefaults &&other)=default
 
NoMoveDefaultsoperator= (const NoMoveDefaults &other)=delete
 

Protected Attributes

core::ContextmContext = nullptr
 
bool mDirty = false
 
VkAccelerationStructureKHR mAccelerationStructure = nullptr
 
core::ManagedBuffer mTlasMemory
 
util::DualBuffer mInstanceBuffer
 
core::ManagedBuffer mScratchBuffer
 
VkDeviceAddress mTlasAddress = 0
 
std::map< uint64_t, BlasInstancemAnimatedBlasInstances
 
std::map< uint64_t, BlasInstancemStaticBlasInstances
 
uint64_t mNextId = 0
 
GeometryMetaBuffer mMetaBuffer
 
- Protected Attributes inherited from foray::core::ManagedResource
std::string mName
 This objects custom name.
 

Additional Inherited Members

- Static Public Member Functions inherited from foray::core::ManagedResource
static void sPrintAllocatedResources (bool printAsWarning)
 Print a list of all registered existing resources.
 
static const std::unordered_set< ManagedResource * > * GetTotalAllocatedResources ()
 

Detailed Description

Describes a top level accerlation structure. A tlas usually holds multiple Blas. A blas is an object/mesh instance together with its transformation in 3d space.

Constructor & Destructor Documentation

◆ Tlas()

foray::as::Tlas::Tlas ( )
default

◆ ~Tlas()

virtual foray::as::Tlas::~Tlas ( )
inlinevirtual

Member Function Documentation

◆ AddBlasInstanceAnimated()

uint64_t foray::as::Tlas::AddBlasInstanceAnimated ( const Blas blas,
BlasInstance::TransformUpdateFunc  getUpdatedGlobalTransformFunc 
)

Add an animated BLAS instance.

Remarks
TLAS will be marked Dirty!

◆ AddBlasInstanceAuto()

uint64_t foray::as::Tlas::AddBlasInstanceAuto ( scene::ncomp::MeshInstance meshInstance)

Add a BLAS instance from meshInstance component.

Remarks
TLAS will be marked Dirty!

◆ AddBlasInstanceStatic()

uint64_t foray::as::Tlas::AddBlasInstanceStatic ( const Blas blas,
const glm::mat4 &  transform 
)

Add a static BLAS instance.

Remarks
TLAS will be marked Dirty!

◆ ClearBlasInstances()

void foray::as::Tlas::ClearBlasInstances ( )

Clear all instances.

Remarks
TLAS will be marked Dirty!

◆ CreateOrUpdate()

virtual void foray::as::Tlas::CreateOrUpdate ( core::Context context = nullptr)
virtual

(Re)creates the TLAS. Required to invoke when changes to the TLAS transitioned it to Dirty state. Will synchronize with the CPU.

◆ Destroy()

virtual void foray::as::Tlas::Destroy ( )
overridevirtual

Destroy the resource.

Remarks
This method must be callable even if the resource has not been initialized yet. This method must call any Destroy() overloads of child objects and of base classes

Implements foray::core::ManagedResource.

◆ Exists()

virtual bool foray::as::Tlas::Exists ( ) const
inlineoverridevirtual

Return true, if the managed resource is allocated.

Example: Vulkan object stored could be nullptr or instantiated

Implements foray::core::ManagedResource.

◆ GetBlasInstance()

const BlasInstance * foray::as::Tlas::GetBlasInstance ( uint64_t  id) const

Get A BLAS instance by id.

◆ GetTypeName()

virtual std::string_view foray::as::Tlas::GetTypeName ( ) const
inlineoverridevirtual

Return a hint for the type of resource managed by the instantiation.

Returns

Reimplemented from foray::core::ManagedResource.

◆ operator VkAccelerationStructureKHR()

foray::as::Tlas::operator VkAccelerationStructureKHR ( )
inline

◆ RemoveBlasInstance()

void foray::as::Tlas::RemoveBlasInstance ( uint64_t  id)

Remove a BLAS instance.

Remarks
TLAS will be marked Dirty!

◆ UpdateLean()

virtual void foray::as::Tlas::UpdateLean ( VkCommandBuffer  cmdBuffer,
uint32_t  frameIndex 
)
virtual

Updates transforms only. TLAS rebuild is performed and synchronized on GPU only. TLAS must by non-Dirty!

Member Data Documentation

◆ mAccelerationStructure

VkAccelerationStructureKHR foray::as::Tlas::mAccelerationStructure = nullptr
protected

◆ mAnimatedBlasInstances

std::map<uint64_t, BlasInstance> foray::as::Tlas::mAnimatedBlasInstances
protected

◆ mContext

core::Context* foray::as::Tlas::mContext = nullptr
protected

◆ mDirty

bool foray::as::Tlas::mDirty = false
protected

◆ mInstanceBuffer

util::DualBuffer foray::as::Tlas::mInstanceBuffer
protected

◆ mMetaBuffer

GeometryMetaBuffer foray::as::Tlas::mMetaBuffer
protected

◆ mNextId

uint64_t foray::as::Tlas::mNextId = 0
protected

◆ mScratchBuffer

core::ManagedBuffer foray::as::Tlas::mScratchBuffer
protected

◆ mStaticBlasInstances

std::map<uint64_t, BlasInstance> foray::as::Tlas::mStaticBlasInstances
protected

◆ mTlasAddress

VkDeviceAddress foray::as::Tlas::mTlasAddress = 0
protected

◆ mTlasMemory

core::ManagedBuffer foray::as::Tlas::mTlasMemory
protected

The documentation for this class was generated from the following file: