Foundation
Loading...
Searching...
No Matches
JoltGPUScene.hpp
Go to the documentation of this file.
1#pragma once
4#include <Core/Container.hpp>
5
7{
9 {
10 uint32_t index{~0u};
11 uint32_t generation{0};
12 [[nodiscard]] bool IsValid() const { return index != ~0u; }
13 [[nodiscard]] bool operator==(GPUSceneMaterialHandle const&) const = default;
14 };
15
17 {
18 uint32_t index{~0u};
19 uint32_t generation{0};
20 [[nodiscard]] bool IsValid() const { return index != ~0u; }
21 [[nodiscard]] bool operator==(GPUSceneLightHandle const&) const = default;
22 };
23
32
38
40 {
41 public:
42 JoltGPUScene(RHIDevice* device, Core::JobSystem* jobs, JoltGPUSceneDesc const& desc = {},
43 Core::Allocator* allocator = GLOBAL_ALLOC);
45
46 JoltGPUScene(JoltGPUScene const&) = delete;
48
49 [[nodiscard]] GPUScene& GetGPUScene() { return mGPU; }
50 [[nodiscard]] GPUScene const& GetGPUScene() const { return mGPU; }
51
52 [[nodiscard]] GPUScene::Result Upload(FImportedMesh const& source, GeometryHandle& outHandle);
53 void Join();
54
55 [[nodiscard]] PhysicsStatus CreateShape(PhysicsShapeDesc const& desc, PhysicsShapeHandle& outHandle);
56 [[nodiscard]] PhysicsStatus DestroyShape(PhysicsShapeHandle handle);
57
58 [[nodiscard]] PhysicsStatus CreateMaterial(GSMaterial const& material, GPUSceneMaterialHandle& outHandle);
59 [[nodiscard]] PhysicsStatus SetMaterial(GPUSceneMaterialHandle handle, GSMaterial const& material);
61
62 [[nodiscard]] PhysicsStatus CreateLight(GSLight const& light, GPUSceneLightHandle& outHandle);
63 [[nodiscard]] PhysicsStatus SetLight(GPUSceneLightHandle handle, GSLight const& light);
65
66 [[nodiscard]] PhysicsStatus Spawn(PhysicsBodyDesc const& bodyDesc, PhysicsVisualDesc const& visualDesc,
67 PhysicsBodyHandle& outBody);
68 [[nodiscard]] PhysicsStatus Destroy(PhysicsBodyHandle body);
69 [[nodiscard]] bool IsBodyValid(PhysicsBodyHandle handle) const;
71
72 [[nodiscard]] PhysicsStatus RayCast(PhysicsRayDesc const& ray, PhysicsRayHit& outHit) const;
73 [[nodiscard]] PhysicsStatus GetBodyPose(PhysicsBodyHandle body, PhysicsBodyPose& outPose) const;
74 [[nodiscard]] PhysicsStatus SetBodyPose(PhysicsBodyHandle body, PhysicsBodyPose const& pose,
76 [[nodiscard]] PhysicsStatus SetLinearVelocity(PhysicsBodyHandle body, float3 const& velocity);
77
78 [[nodiscard]] PhysicsStatus Step(float deltaSeconds, int collisionSteps = 1);
79 [[nodiscard]] PhysicsStatus Commit(RendererUBO& ubo);
80
81 [[nodiscard]] uint32_t GetObjectCount() const { return static_cast<uint32_t>(mObjects.size()); }
82 [[nodiscard]] uint32_t GetBodyCount() const { return mWorld.GetBodyCount(); }
83 [[nodiscard]] uint32_t GetMaxBodies() const { return mWorld.GetMaxBodies(); }
84
85 private:
87 {
88 uint32_t generation{1};
89 uint32_t refCount{0};
90 uint32_t gpuIndex{~0u};
91 bool live{false};
93 };
94
95 struct LightSlot
96 {
97 uint32_t generation{1};
98 bool live{false};
100 };
101
107
108 [[nodiscard]] MaterialSlot* ResolveMaterial(GPUSceneMaterialHandle handle);
109 [[nodiscard]] MaterialSlot const* ResolveMaterial(GPUSceneMaterialHandle handle) const;
110 [[nodiscard]] LightSlot* ResolveLight(GPUSceneLightHandle handle);
111 void MarkBroadPhaseDirty();
112
120 bool mBroadPhaseDirty{false};
121 };
122} // namespace Foundation::Examples
#define GLOBAL_ALLOC
Definition Allocator.hpp:240
constexpr uint32_t kGSInstanceTypeMesh
Definition GPUScene.hpp:25
Allocator interface (noexcept)
Definition Allocator.hpp:29
Definition JobSystem.hpp:135
Definition JoltGPUScene.hpp:40
PhysicsStatus DestroyLight(GPUSceneLightHandle handle)
Definition JoltGPUScene.cpp:177
JoltGPUScene(JoltGPUScene const &)=delete
Core::Vector< LightSlot > mLights
Definition JoltGPUScene.hpp:116
PhysicsStatus GetBodyPose(PhysicsBodyHandle body, PhysicsBodyPose &outPose) const
Definition JoltGPUScene.cpp:255
uint32_t GetBodyCount() const
Definition JoltGPUScene.hpp:82
GPUScene const & GetGPUScene() const
Definition JoltGPUScene.hpp:50
uint32_t GetMaxBodies() const
Definition JoltGPUScene.hpp:83
PhysicsStatus SetLinearVelocity(PhysicsBodyHandle body, float3 const &velocity)
Definition JoltGPUScene.cpp:266
PhysicsStatus Commit(RendererUBO &ubo)
Definition JoltGPUScene.cpp:281
GPUScene & GetGPUScene()
Definition JoltGPUScene.hpp:49
PhysicsStatus CreateLight(GSLight const &light, GPUSceneLightHandle &outHandle)
Definition JoltGPUScene.cpp:125
void MarkBroadPhaseDirty()
Definition JoltGPUScene.cpp:38
Core::Vector< MaterialSlot > mMaterials
Definition JoltGPUScene.hpp:115
PhysicsStatus Destroy(PhysicsBodyHandle body)
Definition JoltGPUScene.cpp:206
PhysicsStatus SetBodyPose(PhysicsBodyHandle body, PhysicsBodyPose const &pose, PhysicsActivation activation=PhysicsActivation::Activate)
Definition JoltGPUScene.cpp:260
LightSlot * ResolveLight(GPUSceneLightHandle handle)
Definition JoltGPUScene.cpp:70
GPUScene mGPU
Definition JoltGPUScene.hpp:114
PhysicsStatus DestroyMaterial(GPUSceneMaterialHandle handle)
Definition JoltGPUScene.cpp:110
JoltPhysicsWorld mWorld
Definition JoltGPUScene.hpp:113
PhysicsStatus SetLight(GPUSceneLightHandle handle, GSLight const &light)
Definition JoltGPUScene.cpp:157
PhysicsStatus Spawn(PhysicsBodyDesc const &bodyDesc, PhysicsVisualDesc const &visualDesc, PhysicsBodyHandle &outBody)
Definition JoltGPUScene.cpp:188
PhysicsStatus SetObjectMaterial(PhysicsBodyHandle body, GPUSceneMaterialHandle material)
Definition JoltGPUScene.cpp:230
~JoltGPUScene()
Definition JoltGPUScene.cpp:28
MaterialSlot * ResolveMaterial(GPUSceneMaterialHandle handle)
Definition JoltGPUScene.cpp:57
bool IsBodyValid(PhysicsBodyHandle handle) const
Definition JoltGPUScene.cpp:228
PhysicsStatus DestroyShape(PhysicsShapeHandle handle)
Definition JoltGPUScene.cpp:52
Core::Vector< Object > mObjects
Definition JoltGPUScene.hpp:117
PhysicsStatus RayCast(PhysicsRayDesc const &ray, PhysicsRayHit &outHit) const
Definition JoltGPUScene.cpp:250
void Join()
Definition JoltGPUScene.cpp:45
Core::Vector< uint32_t > mFreeLights
Definition JoltGPUScene.hpp:119
Core::Vector< uint32_t > mFreeMaterials
Definition JoltGPUScene.hpp:118
PhysicsStatus CreateShape(PhysicsShapeDesc const &desc, PhysicsShapeHandle &outHandle)
Definition JoltGPUScene.cpp:47
bool mBroadPhaseDirty
Definition JoltGPUScene.hpp:120
PhysicsStatus CreateMaterial(GSMaterial const &material, GPUSceneMaterialHandle &outHandle)
Definition JoltGPUScene.cpp:78
PhysicsStatus SetMaterial(GPUSceneMaterialHandle handle, GSMaterial const &material)
Definition JoltGPUScene.cpp:101
uint32_t GetObjectCount() const
Definition JoltGPUScene.hpp:81
JoltGPUScene & operator=(JoltGPUScene const &)=delete
Definition JoltPhysicsWorld.hpp:114
uint32_t GetBodyCount() const
Definition JoltPhysicsWorld.hpp:143
uint32_t GetMaxBodies() const
Definition JoltPhysicsWorld.hpp:144
Definition Device.hpp:246
Definition GPUScene.hpp:187
Result
Definition GPUScene.hpp:195
std::vector< T, StlAllocator< T > > Vector
std::vector with explicit Foundation::Core::StlAllocator constructor
Definition Container.hpp:149
Definition JoltCommon.hpp:8
PhysicsStatus
Definition JoltPhysicsWorld.hpp:12
PhysicsActivation
Definition JoltPhysicsWorld.hpp:36
vec3 float3
Definition Math.hpp:26
Definition Mesh.hpp:129
Definition JoltGPUScene.hpp:17
uint32_t index
Definition JoltGPUScene.hpp:18
bool operator==(GPUSceneLightHandle const &) const =default
bool IsValid() const
Definition JoltGPUScene.hpp:20
uint32_t generation
Definition JoltGPUScene.hpp:19
bool operator==(GPUSceneMaterialHandle const &) const =default
uint32_t index
Definition JoltGPUScene.hpp:10
uint32_t generation
Definition JoltGPUScene.hpp:11
bool IsValid() const
Definition JoltGPUScene.hpp:12
Definition JoltGPUScene.hpp:34
PhysicsWorldDesc physics
Definition JoltGPUScene.hpp:35
GPUSceneDesc gpu
Definition JoltGPUScene.hpp:36
Definition JoltGPUScene.hpp:96
bool live
Definition JoltGPUScene.hpp:98
uint32_t generation
Definition JoltGPUScene.hpp:97
GSLight light
Definition JoltGPUScene.hpp:99
GSMaterial material
Definition JoltGPUScene.hpp:92
uint32_t refCount
Definition JoltGPUScene.hpp:89
uint32_t gpuIndex
Definition JoltGPUScene.hpp:90
bool live
Definition JoltGPUScene.hpp:91
uint32_t generation
Definition JoltGPUScene.hpp:88
Definition JoltGPUScene.hpp:103
PhysicsVisualDesc visual
Definition JoltGPUScene.hpp:105
PhysicsBodyHandle body
Definition JoltGPUScene.hpp:104
Definition JoltPhysicsWorld.hpp:87
Definition JoltPhysicsWorld.hpp:53
Definition JoltPhysicsWorld.hpp:81
Definition JoltPhysicsWorld.hpp:98
Definition JoltPhysicsWorld.hpp:106
Definition JoltPhysicsWorld.hpp:73
Definition JoltPhysicsWorld.hpp:45
Definition JoltGPUScene.hpp:25
uint32_t type
Definition JoltGPUScene.hpp:28
PhysicsBodyPose localPose
Definition JoltGPUScene.hpp:30
float3 scale
Definition JoltGPUScene.hpp:29
GeometryHandle geometry
Definition JoltGPUScene.hpp:26
GPUSceneMaterialHandle material
Definition JoltGPUScene.hpp:27
Definition JoltPhysicsWorld.hpp:61
Definition GPUScene.hpp:170
Definition GPUScene.hpp:131
Definition GPUScene.hpp:93
Definition GPUScene.hpp:47
Definition Renderer.hpp:11