Foray Library
rapid prototyping framework for crossplatform development of vulkan hardware ray tracing applications
Loading...
Searching...
No Matches
foray_blasinstance.hpp
Go to the documentation of this file.
1#pragma once
2#include "../foray_basics.hpp"
3#include "../foray_glm.hpp"
4#include "../foray_vulkan.hpp"
6#include <functional>
7
8namespace foray::as {
11 {
12 public:
14 using TransformUpdateFunc = std::function<void(glm::mat4&)>;
15
16 inline BlasInstance() {}
18 BlasInstance(uint64_t instanceId, const Blas* blas, TransformUpdateFunc getUpdatedGlobalTransformFunc);
20 BlasInstance(uint64_t instanceId, const Blas* blas, const glm::mat4& globalTransform);
21
22 FORAY_GETTER_V(InstanceId)
23 FORAY_GETTER_CR(AsInstance)
25 FORAY_PROPERTY_V(GetUpdatedGlobalTransformFunc)
26
27 bool IsAnimated() const { return !!mGetUpdatedGlobalTransformFunc; }
28
30 void SetGeometryMetaOffset(uint32_t offset);
31
33 void SetShaderBindingTableOffset(uint32_t offset);
34
35 inline VkGeometryInstanceFlagsKHR GetGeometryInstanceFlags() const { return mAsInstance.flags; }
36 inline BlasInstance& SetGeometryInstanceFlags(VkGeometryFlagsKHR flags)
37 {
38 mAsInstance.flags = flags;
39 return *this;
40 }
41 inline BlasInstance& AddGeometryInstanceFlag(VkGeometryFlagBitsKHR flag)
42 {
43 mAsInstance.flags |= flag;
44 return *this;
45 }
46
47
49 void Update();
50
52 static void TranslateTransformMatrix(const glm::mat4& in, VkTransformMatrixKHR& out);
53
54 protected:
56 uint64_t mInstanceId = 0UL;
58 const Blas* mBlas;
62 VkAccelerationStructureInstanceKHR mAsInstance = {};
63 };
64} // namespace foray::as
A reference to a BLAS maintained by the TLAS.
Definition foray_blasinstance.hpp:11
void SetGeometryMetaOffset(uint32_t offset)
Set the offset into the GeometryMetaBuffer (see foray_geometrymetabuffer.hpp)
std::function< void(glm::mat4 &)> TransformUpdateFunc
Function template used for updating the transform matrix of animated instances.
Definition foray_blasinstance.hpp:14
void SetShaderBindingTableOffset(uint32_t offset)
Set the offset for shader binding table.
BlasInstance & SetGeometryInstanceFlags(VkGeometryFlagsKHR flags)
Definition foray_blasinstance.hpp:36
BlasInstance(uint64_t instanceId, const Blas *blas, const glm::mat4 &globalTransform)
Initialize as static.
void Update()
Updates the transform by fetching a new matrix.
const Blas * mBlas
BLAS.
Definition foray_blasinstance.hpp:58
VkAccelerationStructureInstanceKHR mAsInstance
Vulkans instance struct, contains the actual reference to the BLAS, the transform and the custom inde...
Definition foray_blasinstance.hpp:62
VkGeometryInstanceFlagsKHR GetGeometryInstanceFlags() const
Definition foray_blasinstance.hpp:35
uint64_t mInstanceId
Id assigned by the TLAS.
Definition foray_blasinstance.hpp:56
TransformUpdateFunc mGetUpdatedGlobalTransformFunc
Function used to update transform (if animated, nullptr otherwise)
Definition foray_blasinstance.hpp:60
BlasInstance & AddGeometryInstanceFlag(VkGeometryFlagBitsKHR flag)
Definition foray_blasinstance.hpp:41
static void TranslateTransformMatrix(const glm::mat4 &in, VkTransformMatrixKHR &out)
Translates glms column major 4x4 matrix to the row major 4x3 matrix type VkTransformMatrixKHR.
BlasInstance(uint64_t instanceId, const Blas *blas, TransformUpdateFunc getUpdatedGlobalTransformFunc)
Initialize as animated.
BlasInstance()
Definition foray_blasinstance.hpp:16
bool IsAnimated() const
Definition foray_blasinstance.hpp:27
A Blas (Bottom Level Acceleration Structure) is the raytracing equivalent concept of a mesh.
Definition foray_blas.hpp:15
#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
#define FORAY_PROPERTY_V(member)
Getter+Setter shorthand for value types.
Definition foray_basics.hpp:81
Definition foray_as_declares.hpp:3