diff --git a/projects/fire_works/shaders/add.comp b/projects/fire_works/shaders/add.comp index 1846085e68090574614eb4562f816c8dfec3fc28..3187e18d76e22db06c30766f25b5aba9e32d69be 100644 --- a/projects/fire_works/shaders/add.comp +++ b/projects/fire_works/shaders/add.comp @@ -18,12 +18,6 @@ void main() { vec4 outSmoke = imageLoad(inSmoke, uv); vec4 outTrails = imageLoad(inTrails, uv); - // Reverse alpha values: - // -> Because clear value is always vec4(0, 0, 0, 1) which is now vec4(0, 0, 0, 0)! - outParticles.a = 1.0f - clamp(outParticles.a, 0, 1); - outSmoke.a = 1.0f - clamp(outSmoke.a, 0, 1); - outTrails.a = 1.0f - clamp(outTrails.a, 0, 1); - // TODO: add noise to the smoke here! vec4 result = vec4( diff --git a/projects/fire_works/shaders/particle.frag b/projects/fire_works/shaders/particle.frag index 97221ef2fd9fcbf204bfb834719b309aaf72a3cc..173c83ef5d7a79bfd8446c5586b7a2f487fe7546 100644 --- a/projects/fire_works/shaders/particle.frag +++ b/projects/fire_works/shaders/particle.frag @@ -14,7 +14,7 @@ void main() { const float value = length(passPos); if (value < 0.5f) { - outColor = vec4(passColor, max(value * 2.0f, 0.0f)); // Use inverse alpha value + outColor = vec4(passColor, 1.0f - max(value * 2.0f, 0.0f)); } else { discard; } diff --git a/projects/fire_works/shaders/smoke.frag b/projects/fire_works/shaders/smoke.frag index ad4ae33d570cc5b5370faaea7872eab99e43e6b6..7339c6ee64d321267f0cafb2f0169c9189d15c42 100644 --- a/projects/fire_works/shaders/smoke.frag +++ b/projects/fire_works/shaders/smoke.frag @@ -56,9 +56,7 @@ void main() { result.r = clamp(result.r, 0, 1); result.g = clamp(result.g, 0, 1); result.b = clamp(result.b, 0, 1); - - // Inverse alpha value - result.a = 1.0f - clamp(result.a, 0, 1);; + result.a = clamp(result.a, 0, 1);; if (result.a < 1.0f) { outColor = result; diff --git a/projects/fire_works/src/main.cpp b/projects/fire_works/src/main.cpp index 435bfc62512044356225b00a1b2487e4fced9775..3d894904d81fada1d3a93c7c76a160459bab9fab 100644 --- a/projects/fire_works/src/main.cpp +++ b/projects/fire_works/src/main.cpp @@ -260,7 +260,6 @@ int main(int argc, const char **argv) { particles.resize(PARTICLE_COUNT); initializeParticles(particles); - vkcv::Buffer<particle_t> particleBuffer = core.createBuffer<particle_t>( vkcv::BufferType::STORAGE, particles.size(), @@ -275,8 +274,7 @@ int main(int argc, const char **argv) { core.createBuffer<particle_t>(vkcv::BufferType::STORAGE, particles.size()); particleBufferCopy.fill(particles); - - + { vkcv::DescriptorWrites writes; writes.writeStorageBuffer(0, particleBuffer.getHandle()); @@ -393,7 +391,6 @@ int main(int argc, const char **argv) { core.writeDescriptorSet(generationDescriptorSet, writes); } - std::vector<smoke_t> smokes; smokes.reserve(SMOKE_COUNT); @@ -548,6 +545,8 @@ int main(int argc, const char **argv) { true }; + smokePipelineDefinition.m_blendMode = vkcv::BlendMode::Additive; + vkcv::GraphicsPipelineHandle smokePipeline = core.createGraphicsPipeline(smokePipelineDefinition); const std::vector<vkcv::VertexAttachment> vaTrail = trailShaderProgram.getVertexAttachments(); @@ -570,6 +569,7 @@ int main(int argc, const char **argv) { }; trailPipelineDefinition.m_PrimitiveTopology = vkcv::PrimitiveTopology::PointList; + trailPipelineDefinition.m_blendMode = vkcv::BlendMode::Additive; vkcv::GraphicsPipelineHandle trailPipeline = core.createGraphicsPipeline(trailPipelineDefinition); @@ -639,6 +639,8 @@ int main(int argc, const char **argv) { true }; + particlePipelineDefinition.m_blendMode = vkcv::BlendMode::Additive; + vkcv::GraphicsPipelineHandle particlePipeline = core.createGraphicsPipeline(particlePipelineDefinition); std::vector<vkcv::DrawcallInfo> drawcallsParticles; diff --git a/src/vkcv/Core.cpp b/src/vkcv/Core.cpp index 06942b87c072566120d4397f3d3be728770ae057..22cc66e7cb9c31d569f5d56fab59a7b17cd840a4 100644 --- a/src/vkcv/Core.cpp +++ b/src/vkcv/Core.cpp @@ -249,9 +249,9 @@ namespace vkcv clearValues.emplace_back(std::array<float, 4>{ clear, - clear, - clear, - 1.f + clear, + clear, + 0.f }); } }