Fixed wrong material used for particles when more than one was used

This commit is contained in:
Antoine Pilote
2023-09-23 21:49:52 -04:00
parent 4d2f0cea18
commit 3c57e57d81

View File

@@ -387,6 +387,8 @@ namespace Nuake
Renderer::Flush(gBufferShader, false);
// Particles
Ref<Material> previousMaterial = Renderer::QuadMesh->GetMaterial();
auto particleEmitterView = scene.m_Registry.view<TransformComponent, ParticleEmitterComponent, VisibilityComponent>();
for (auto& e : particleEmitterView)
{
@@ -395,6 +397,8 @@ namespace Nuake
if (!visibility.Visible)
continue;
Renderer::QuadMesh->SetMaterial(emitterComponent.ParticleMaterial);
Vector3 oldColor = Renderer::QuadMesh->GetMaterial()->data.m_AlbedoColor;
auto initialTransform = transform.GetGlobalTransform();
for (auto& p : emitterComponent.Emitter.Particles)
@@ -416,18 +420,19 @@ namespace Nuake
// Scale
particleTransform = glm::scale(particleTransform, emitterComponent.ParticleScale);
Renderer::QuadMesh->GetMaterial()->data.u_HasAlbedo = 0;
Renderer::QuadMesh->GetMaterial()->data.m_AlbedoColor = p.Color;
Renderer::SubmitMesh(Renderer::QuadMesh, particleTransform, (uint32_t)e);
}
Renderer::QuadMesh->SetMaterial(emitterComponent.ParticleMaterial);
Renderer::Flush(gBufferShader, false);
Renderer::QuadMesh->GetMaterial()->data.m_AlbedoColor = oldColor;
Renderer::QuadMesh->SetMaterial(previousMaterial);
}
// Reset material on quadmesh
//Renderer::QuadMesh->SetMaterial(previousMaterial);
// Skinned mesh at the end because we switch shader
gBufferSkinnedMeshShader->Bind();
gBufferSkinnedMeshShader->SetUniformMat4f("u_Projection", mProjection);