OpenGothic
Open source reimplementation of Gothic I and II
Loading...
Searching...
No Matches
rtscene.h
Go to the documentation of this file.
1#pragma once
2
3#include <Tempest/AccelerationStructure>
4#include <Tempest/DescriptorArray>
5#include <Tempest/StorageBuffer>
6#include <Tempest/Texture2d>
7
8#include <vector>
9
10class Material;
11class StaticMesh;
12
13class RtScene {
14 public:
15 RtScene();
16
17 enum Category : uint8_t {
22 };
23
24 enum CullMask : uint32_t {
25 CM_Opaque = 0x1,
27 CM_Water = 0x4,
28 CM_Unknown = 0x80,
29 };
30
31 struct RtObjectDesc {
32 uint32_t instanceId;
33 uint32_t firstPrimitive : 24;
34 uint32_t bits: 8;
35 };
36
37 void notifyTlas(const Material& m, RtScene::Category cat) const;
38 bool isUpdateRequired() const;
39
40 void addInstance(const Tempest::Matrix4x4& pos, const Tempest::AccelerationStructure& blas,
41 const Material& mat, const StaticMesh& mesh, size_t firstIndex, size_t iboLength, Category cat);
42 void buildTlas();
43
44 Tempest::AccelerationStructure tlas;
45
46 Tempest::DescriptorArray tex;
47 Tempest::DescriptorArray vbo;
48 Tempest::DescriptorArray ibo;
49 Tempest::StorageBuffer rtDesc;
50
51 private:
52 struct BuildBlas {
53 std::vector<Tempest::RtGeometry> geom;
54 std::vector<RtObjectDesc> rtDesc;
55 };
56
57 struct Build {
58 std::vector<const Tempest::Texture2d*> tex;
59 std::vector<const Tempest::StorageBuffer*> vbo;
60 std::vector<const Tempest::StorageBuffer*> ibo;
61
62 std::vector<RtObjectDesc> rtDesc;
63 std::vector<Tempest::RtInstance> inst;
64
65 BuildBlas staticOpaque;
66 BuildBlas staticAt;
67 };
68
69 uint32_t aquireBucketId(const Material& mat, const StaticMesh& mesh);
70 void addInstance(const BuildBlas& build, Tempest::AccelerationStructure& blas, Tempest::RtInstanceFlags flags);
71
72 Build build;
73 Tempest::AccelerationStructure blasStaticOpaque;
74 Tempest::AccelerationStructure blasStaticAt;
75
76 mutable bool needToUpdate = true;
77 };
78
@ CM_Transparent
Definition rtscene.h:26
@ CM_Opaque
Definition rtscene.h:25
@ CM_Water
Definition rtscene.h:27
@ CM_Unknown
Definition rtscene.h:28
Tempest::StorageBuffer rtDesc
Definition rtscene.h:49
void notifyTlas(const Material &m, RtScene::Category cat) const
Definition rtscene.cpp:12
void addInstance(const Tempest::Matrix4x4 &pos, const Tempest::AccelerationStructure &blas, const Material &mat, const StaticMesh &mesh, size_t firstIndex, size_t iboLength, Category cat)
Tempest::AccelerationStructure tlas
Definition rtscene.h:44
@ Static
Definition rtscene.h:20
@ None
Definition rtscene.h:18
@ Movable
Definition rtscene.h:21
@ Landscape
Definition rtscene.h:19
Tempest::DescriptorArray ibo
Definition rtscene.h:48
Tempest::DescriptorArray vbo
Definition rtscene.h:47
bool isUpdateRequired() const
Definition rtscene.cpp:20
Tempest::DescriptorArray tex
Definition rtscene.h:46
void buildTlas()
Definition rtscene.cpp:106
RtScene()
Definition rtscene.cpp:9
uint32_t firstPrimitive
Definition rtscene.h:33
uint32_t instanceId
Definition rtscene.h:32