From ed3cff988451686d163bb7d19b5329a8bc436401 Mon Sep 17 00:00:00 2001
From: Tobias Frisch <tfrisch@uni-koblenz.de>
Date: Mon, 31 Jan 2022 03:00:36 +0100
Subject: [PATCH] Corrected error with unsigned loop indices

Signed-off-by: Tobias Frisch <tfrisch@uni-koblenz.de>
---
 .../shaders/update_particle_deformation.comp         |  2 +-
 .../shaders/update_particle_velocities.comp          | 12 ++++++++----
 projects/wobble_bobble/src/main.cpp                  |  2 +-
 3 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/projects/wobble_bobble/shaders/update_particle_deformation.comp b/projects/wobble_bobble/shaders/update_particle_deformation.comp
index 9711d48a..8cd2aabe 100644
--- a/projects/wobble_bobble/shaders/update_particle_deformation.comp
+++ b/projects/wobble_bobble/shaders/update_particle_deformation.comp
@@ -25,7 +25,7 @@ void main()	{
 
         mat3 velocity_gradient = mat3(0.0f);
 
-        uint i, j, k;
+        int i, j, k;
 
         for (i = -gridWindow.x; i <= gridWindow.x; i++) {
             for (j = -gridWindow.y; j <= gridWindow.y; j++) {
diff --git a/projects/wobble_bobble/shaders/update_particle_velocities.comp b/projects/wobble_bobble/shaders/update_particle_velocities.comp
index 123ac83a..e1927eb8 100644
--- a/projects/wobble_bobble/shaders/update_particle_velocities.comp
+++ b/projects/wobble_bobble/shaders/update_particle_velocities.comp
@@ -1,5 +1,6 @@
 #version 450
 #extension GL_GOOGLE_include_directive : enable
+#extension GL_EXT_control_flow_attributes : enable
 
 layout(local_size_x = 64, local_size_y = 1, local_size_z = 1) in;
 
@@ -23,9 +24,10 @@ void main()	{
         ivec3 gridResolution = textureSize(sampler3D(gridImage, gridSampler), 0);
         ivec3 gridWindow = ivec3(minimal.size * 2.0f * gridResolution);
 
-        vec3 velocity = vec3(minimal.velocity);
+        vec3 velocity_pic = vec3(0.0f);
+        vec3 velocity_flip = vec3(minimal.velocity);
 
-        uint i, j, k;
+        int i, j, k;
 
         for (i = -gridWindow.x; i <= gridWindow.x; i++) {
             for (j = -gridWindow.y; j <= gridWindow.y; j++) {
@@ -38,14 +40,16 @@ void main()	{
                         vec4 gridOldSample = texture(sampler3D(gridOldImage, gridSampler), voxel);
 
                         vec3 weight = voxel_particle_weight(voxel, minimal);
+                        float w = (weight.x * weight.y * weight.z);
 
-                        velocity += (weight.x * weight.y * weight.z) * (gridSample.xyz - gridOldSample.xyz);
+                        velocity_pic += gridSample.xyz * w;
+                        velocity_flip += (gridSample.xyz - gridOldSample.xyz) * w;
                     }
                 }
             }
         }
 
-        particles[gl_GlobalInvocationID.x].minimal.velocity = velocity;
+        particles[gl_GlobalInvocationID.x].minimal.velocity = mix(velocity_pic, velocity_flip, 0.95f);
     }
 
     memoryBarrierBuffer();
diff --git a/projects/wobble_bobble/src/main.cpp b/projects/wobble_bobble/src/main.cpp
index 1049305c..4e763548 100644
--- a/projects/wobble_bobble/src/main.cpp
+++ b/projects/wobble_bobble/src/main.cpp
@@ -40,7 +40,7 @@ void distributeParticles(Particle *particles, size_t count, const glm::vec3& cen
 		
 		particles[i].position = center + offset;
 		particles[i].size = size;
-		particles[i].velocity = glm::vec3(0.0f, 0.1f, 0.0f);
+		particles[i].velocity = glm::vec3(0.0f);
 		
 		volume += size;
 	}
-- 
GitLab