16#include <magic_enum/magic_enum.hpp>
17#include <entt/entity/fwd.hpp>
19#include <pinocchio/multibody/fwd.hpp>
34 const pin::GeometryModel &geom_model,
35 const pin::GeometryData &geom_data);
42 [[nodiscard]]
bool hasInternalPointers()
const {
43 return m_geomModel && m_geomData;
46 void compositeTransparencyPass(
CommandBuffer &command_buffer);
49 const Camera &camera,
bool transparent);
56 void initCompositePipeline(
const MeshLayout &layout);
78 static constexpr SDL_GPUPrimitiveType
82 return SDL_GPU_PRIMITIVETYPE_TRIANGLELIST;
84 return SDL_GPU_PRIMITIVETYPE_LINELIST;
86 return SDL_GPU_PRIMITIVETYPE_POINTLIST;
90 template <PipelineType T>
using pipeline_tag = entt::integral_constant<T>;
101 .vertex_shader_path =
"PbrBasic.vert",
102 .fragment_shader_path =
"PbrBasic.frag",
105 .vertex_shader_path =
"PbrBasic.vert",
106 .fragment_shader_path =
"PbrTransparent.frag",
107 .cull_mode = SDL_GPU_CULLMODE_NONE,
111 .vertex_shader_path =
"Hud3dElement.vert",
112 .fragment_shader_path =
"Hud3dElement.frag",
129 std::map<PipelineKey, GraphicsPipeline> m_store;
135 return m_store.contains(key);
143 auto it = m_store.find(key);
144 if (it != m_store.cend())
151 m_store.emplace(key, std::move(pipeline));
199 const pin::GeometryModel &geom_model,
207 "Cannot call setConfig() after render system was initialized.");
215 const pin::GeometryData &geom_data);
221 const std::vector<OpaqueCastable> &
castables()
const {
return m_castables; }
243 SDL_GPUTextureFormat render_target_format,
244 SDL_GPUTextureFormat depth_stencil_format);
269 const pin::GeometryModel &
geomModel()
const {
return *m_geomModel; }
272 const pin::GeometryData &
geomData()
const {
return *m_geomData; }
276 const entt::registry &
registry()
const {
return m_registry; }
279 entt::registry &m_registry;
282 const pin::GeometryModel *m_geomModel;
283 const pin::GeometryData *m_geomData;
284 std::vector<OpaqueCastable> m_castables;
286 PipelineManager m_pipelines;
289 static_assert(Scene<RobotScene>);
Definition CommandBuffer.h:16
Class representing a graphics pipeline.
Definition GraphicsPipeline.h:15
A class to store type-erased vertex data and index data.
Definition MeshData.h:33
This class defines the layout of a mesh's vertices.
Definition MeshLayout.h:122
Class for defining the shadow maps (as an atlas) and rendering into it.
Definition DepthAndShadowPass.h:127
PipelineManager & operator=(const PipelineManager &)=delete
PipelineManager()
Definition RobotScene.h:132
bool contains(const PipelineKey &key) const
Definition RobotScene.h:134
void clear()
Definition RobotScene.h:154
GraphicsPipeline * get(const PipelineKey &key)
Definition RobotScene.h:142
PipelineManager(const PipelineManager &)=delete
void set(const PipelineKey &key, GraphicsPipeline &&pipeline)
Definition RobotScene.h:150
PipelineManager(PipelineManager &&)=default
void clearEnvironment()
Destroy all entities with the EnvironmentTag component.
const entt::registry & registry() const
Definition RobotScene.h:276
void update()
Update the transform component of the GeometryObject entities.
RobotScene(const RobotScene &)=delete
static constexpr SDL_GPUPrimitiveType getPrimitiveTopologyForType(PipelineType type)
Map pipeline type to geometry primitive.
Definition RobotScene.h:79
const pin::GeometryModel & geomModel() const
Getter for the pinocchio GeometryModel object.
Definition RobotScene.h:269
bool shadowsEnabled() const
Definition RobotScene.h:260
GraphicsPipeline createRenderPipeline(const PipelineKey &key, const MeshLayout &layout, SDL_GPUTextureFormat render_target_format, SDL_GPUTextureFormat depth_stencil_format)
entt::integral_constant< T > pipeline_tag
Definition RobotScene.h:90
FragmentSamplerSlots
Definition RobotScene.h:72
@ SSAO_SLOT
Definition RobotScene.h:72
@ SHADOW_MAP_SLOT
Definition RobotScene.h:72
void clearRobotGeometries()
Destroy all entities with the PinGeomObjComponent component (Pinocchio geometry objects).
const pin::GeometryData & geomData() const
Getter for the pinocchio GeometryData object.
Definition RobotScene.h:272
void setConfig(const Config &config)
Definition RobotScene.h:204
ssao::SsaoPass ssaoPass
Definition RobotScene.h:158
const std::vector< OpaqueCastable > & castables() const
Definition RobotScene.h:221
const Device & device()
Definition RobotScene.h:274
void renderOpaque(CommandBuffer &command_buffer, const Camera &camera)
VertexUniformSlots
Definition RobotScene.h:65
@ LIGHT_MATRICES
Definition RobotScene.h:65
@ TRANSFORM
Definition RobotScene.h:65
void renderTransparent(CommandBuffer &command_buffer, const Camera &camera)
std::array< DirectionalLight, kNumLights > directionalLight
Definition RobotScene.h:157
entt::registry & registry()
Definition RobotScene.h:275
ShadowMapPass shadowPass
Definition RobotScene.h:190
RobotScene(entt::registry ®istry, const RenderContext &renderer)
Non-initializing constructor.
entt::entity addEnvironmentObject(MeshData &&data, Mat4f placement, PipelineType pipe_type=PIPELINE_TRIANGLEMESH)
struct candlewick::multibody::RobotScene::GBuffer gBuffer
void loadModels(const pin::GeometryModel &geom_model, const pin::GeometryData &geom_data)
Set the internal geometry model and data pointers, and load the corresponding models.
RobotScene(entt::registry ®istry, const RenderContext &renderer, const pin::GeometryModel &geom_model, const pin::GeometryData &geom_data, Config config)
Constructor which initializes the system.
void ensurePipelinesExist(const std::set< pipeline_req_t > &required_pipelines)
Ensure the render pipelines were properly created following the provided requirements.
entt::entity addEnvironmentObject(MeshData &&data, const Eigen::Affine3f &T, PipelineType pipe_type=PIPELINE_TRIANGLEMESH)
Definition RobotScene.h:230
FragmentUniformSlots
Definition RobotScene.h:66
@ MATERIAL
Definition RobotScene.h:67
@ SSAO_FLAG
Definition RobotScene.h:69
@ LIGHTING
Definition RobotScene.h:68
@ ATLAS_INFO
Definition RobotScene.h:70
Uint32 numLights() const noexcept
Definition RobotScene.h:223
void render(CommandBuffer &command_buffer, const Camera &camera)
Config & config()
Definition RobotScene.h:257
void release()
Release all resources.
const Config & config() const
Definition RobotScene.h:258
std::tuple< MeshLayout, PipelineKey > pipeline_req_t
Definition RobotScene.h:262
void collectOpaqueCastables()
PipelineType
Definition RobotScene.h:59
@ PIPELINE_HEIGHTFIELD
Definition RobotScene.h:61
@ PIPELINE_POINTCLOUD
Definition RobotScene.h:62
@ PIPELINE_TRIANGLEMESH
Definition RobotScene.h:60
bool pbrHasPrepass() const
Definition RobotScene.h:259
static PipelineType pinGeomToPipeline(const coal::CollisionGeometry &geom)
Map hpp-fcl/coal collision geometry to desired pipeline type.
Support for the Pinocchio rigid-body algorithms library and the Coal collision detection library.
Definition LoadPinocchioGeometry.h:8
void updateRobotTransforms(entt::registry ®istry, const pin::GeometryModel &geom_model, const pin::GeometryData &geom_data)
A system for updating the transform components for robot geometry entities.
RenderMode
Definition Components.h:24
terminate_with_message(std::string_view, Ts &&...) -> terminate_with_message< Ts... >
Eigen::Matrix4f Mat4f
Definition math_types.h:11
constexpr NoInitT NoInit
Definition Tags.h:9
The main way of using a camera to render things.
Definition Camera.h:19
RAII wrapper for SDL_GPUDevice.
Definition Device.h:17
The RenderContext class provides a rendering context for a graphical application.
Definition RenderContext.h:36
Definition DepthAndShadowPass.h:110
Definition RobotScene.h:99
PipelineConfig transparent
Definition RobotScene.h:104
PipelineConfig opaque
Definition RobotScene.h:100
Definition RobotScene.h:98
ShadowPassConfig shadow_config
Definition RobotScene.h:118
struct candlewick::multibody::RobotScene::Config::TrianglePipelineConfig triangle_config
PipelineConfig pointcloud_config
Definition RobotScene.h:114
bool enable_shadows
Definition RobotScene.h:115
bool enable_ssao
Definition RobotScene.h:116
PipelineConfig heightfield_config
Definition RobotScene.h:110
bool triangle_has_prepass
Definition RobotScene.h:117
Definition RobotScene.h:159
Texture accumTexture
Definition RobotScene.h:164
void release() noexcept
Definition RobotScene.h:175
bool initialized() const
Definition RobotScene.h:170
Texture revealTexture
Definition RobotScene.h:165
Texture resolveNormalMap
Definition RobotScene.h:161
~GBuffer() noexcept
Definition RobotScene.h:188
SDL_GPUSampler * sampler
Definition RobotScene.h:168
Texture resolveRevealTexture
Definition RobotScene.h:167
Texture resolveAccumTexture
Definition RobotScene.h:166
Texture normalMap
Definition RobotScene.h:160
Definition RobotScene.h:92
const char * fragment_shader_path
Definition RobotScene.h:95
SDL_GPUCullMode cull_mode
Definition RobotScene.h:96
const char * vertex_shader_path
Definition RobotScene.h:94
Definition RobotScene.h:121
RenderMode renderMode
Definition RobotScene.h:124
PipelineType type
Definition RobotScene.h:122
auto operator<=>(const PipelineKey &) const =default
bool transparent
Definition RobotScene.h:123