2#include <RGL/Types.hpp>
3#include "mathtypes.hpp"
8#include <RGL/Pipeline.hpp>
11#include "MaterialShared.hpp"
19 struct MeshCollectionStatic;
28 uint32_t bytesPerParticle;
29 uint32_t particlePositionOffset;
30 uint32_t particleScaleOffset;
31 uint32_t particleFrameOffset;
44 const auto GetInitShader()
const {
45 return userInitPipeline;
48 const auto GetUpdateShader()
const {
49 return userUpdatePipeline;
53 RGLComputePipelinePtr userInitPipeline, userUpdatePipeline;
57 std::vector<RGL::PipelineLayoutDescriptor::LayoutBindingDesc> bindings;
58 size_t pushConstantSize = 0;
59 OpacityMode opacityMode = OpacityMode::Opaque;
60 bool zTestEnabled =
true;
61 bool zWriteEnabled =
true;
64 enum class LightingMode : uint8_t {
71 constexpr static uint8_t
72 particleDataBufferBinding = 18,
73 particleAliveIndexBufferBinding = 19,
74 particleMatrixBufferBinding = 20,
75 particleEmitterStateBufferBinding = 22
78 bool IsTransparent()
const {
79 return opacityMode == OpacityMode::Transparent;
84 const RGL::PrimitiveTopology topology;
85 const LightingMode mode;
89 RGLRenderPipelinePtr GetMainRenderPipeline()
const {
90 return userRenderPipeline;
93 RGLRenderPipelinePtr GetShadowRenderPipeline()
const {
94 return shadowRenderPipeline;
97 auto GetDepthPrepassPipeline()
const {
98 return prepassRenderPipeline;
102 OpacityMode opacityMode = OpacityMode::Opaque;
103 RGLRenderPipelinePtr userRenderPipeline, prepassRenderPipeline, shadowRenderPipeline;
113 template<LightingMode mode>
117 .vertexConfig = quadVertexConfig,
118 .topology = RGL::PrimitiveTopology::TriangleStrip,
120 }, augmentBillboardConfig(config,mode)) {}
128 template<LightingMode mode>
132 .vertexConfig = defaultVertexConfig,
133 .topology = RGL::PrimitiveTopology::TriangleList,
135 }, augmentMeshConfig(config, mode)) {}
143 RGLComputePipelinePtr userSelectionPipeline;
157 std::array<Ref<Texture>, 16> textureBindings;
158 std::bitset<16> samplerBindings;
175 MaterialVariant material;
180 auto GetMaterial()
const {
188 static constexpr uint32_t kEngineDataBinding = 21;
191 MaterialVariant material;
200 customSelectionFunction =
selfn;
203 auto GetMaterial()
const {
218 template<LightingMode mode>
220 constexpr static uint16_t SpritesheetBindingSlot = 1;
221 constexpr static uint16_t SamplerBindingSlot = 0;
228 .binding = SamplerBindingSlot,
229 .type = RGL::BindingType::Sampler,
230 .stageFlags = RGL::BindingVisibility::Fragment,
234 .binding = SpritesheetBindingSlot,
235 .type = RGL::BindingType::SampledImage,
236 .stageFlags = RGL::BindingVisibility::Fragment,
240 .pushConstantSize = pushConstantSize,
241 .opacityMode = opacityMode
244 constexpr static std::string_view fs_particle_name = mode == LightingMode::Lit ?
"default_billboard_particle" :
"default_billboard_particle_unlit";
250 template<LightingMode mode>
255 uint16_t numSpritesWidth = 0;
256 uint16_t numSpritesHeight = 0;
265 const uint32_t bytesPerParticle;
266 const uint32_t particlePositionOffset;
267 const uint32_t particleScaleOffset;
268 const uint32_t particleFrameOffset;
279 constexpr static uint8_t
283 kSpecularBinding = 3,
284 kMetallicBinding = 4,
285 kRoughnessBinding = 5,
291 const uint32_t bytesPerParticle;
292 const uint32_t positionOffsetBytes;
293 const uint32_t scaleOffsetBytes;
294 const uint32_t rotationOffsetBytes;
Definition RenderEngine.hpp:64
Definition concurrentqueue.h:747
Definition Animation.hpp:6
Definition Pipeline.hpp:169
Definition ParticleMaterial.hpp:172
Definition ParticleMaterial.hpp:108
Definition ParticleMaterial.hpp:114
Definition ParticleMaterial.hpp:147
Definition ParticleMaterial.hpp:139
Definition ParticleMaterial.hpp:186
Definition ParticleMaterial.hpp:123
Definition ParticleMaterial.hpp:129
Definition ParticleMaterial.hpp:275
virtual uint8_t SetPushConstantData(std::span< std::byte, 128 > data) const
Definition ParticleMaterial.cpp:396
Definition ParticleMaterial.hpp:271
Definition ParticleMaterial.hpp:25
Definition ParticleMaterial.hpp:34
Definition ParticleMaterial.hpp:56
Definition ParticleMaterial.hpp:154
virtual uint8_t SetPushConstantData(std::span< std::byte, 128 > data) const
Definition ParticleMaterial.hpp:166
Definition ParticleMaterial.hpp:82
Definition ParticleMaterial.hpp:69
Definition ParticleMaterial.hpp:212
Definition ParticleMaterial.hpp:38
Definition ParticleMaterial.hpp:21
Definition ParticleMaterial.hpp:254
Definition ParticleMaterial.hpp:248
virtual uint8_t SetPushConstantData(std::span< std::byte, 128 > data) const
Definition ParticleMaterial.cpp:239
Definition ParticleMaterial.hpp:219
Definition qualifier.hpp:35