89 {
91
93
94 builder.Recording("Particle");
95
96 std::shared_ptr<VulkanBuffer> buffer = nullptr;
97
98 IterWorldCompWithBreak<TagComponent>(
FrameInfo::Get(), [&](
int entityID, TransformComponent& tranComp, TagComponent& tagComp) {
99 if (tagComp.GetTag().find("Ground") != tagComp.GetTag().end())
100 {
101 auto& meshComp = FrameInfo::Get().m_World->GetRegistry().get<MeshComponent>((entt::entity)entityID);
102 const std::shared_ptr<MeshPack> meshPack = *meshComp.GetMesh()->GetPacks().first();
103 buffer = meshPack->GetResource().positions.buffer;
104 return true;
105 }
106 return false;
107 });
108
109 if (!buffer) return;
110
111 builder.AddBarriers(buffer->Get(), 0, VK_ACCESS_SHADER_WRITE_BIT, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT);
112
114
116
117 builder.BindPipeline("ParticleRenderer.Particle.Default");
118
119 builder.Dispatch(16 * 16, 1, 1);
120
121
122
123 builder.EndRecording();
124 }
#define SPICES_PROFILE_ZONE
static DescriptorSetInfo & GetByName(const String2 &name)
Get a DescriptorSetInfo by owner's name.
static FrameInfo & Get()
Get FrameInfo.
std::shared_ptr< RendererPass > m_Pass
RendererPass.
VulkanState & m_VulkanState
This variable is passed while renderer instanced.
std::array< VkCommandBuffer, MaxFrameInFlight > m_ComputeCommandBuffer