diff --git a/projects/wobble_bobble/shaders/init_particle_volumes.comp b/projects/wobble_bobble/shaders/init_particle_volumes.comp index be0e0d0610c06cb741728c0082dcf825cebda499..c7c64be34e4093e017b374d6ae7e7a49478e2343 100644 --- a/projects/wobble_bobble/shaders/init_particle_volumes.comp +++ b/projects/wobble_bobble/shaders/init_particle_volumes.comp @@ -24,6 +24,9 @@ void main() { float mass = 0.0f; int i, j, k; + barrier(); + memoryBarrierImage(); + for (i = -gridWindow.x; i <= gridWindow.x; i++) { for (j = -gridWindow.y; j <= gridWindow.y; j++) { for (k = -gridWindow.z; k <= gridWindow.z; k++) { @@ -37,6 +40,9 @@ void main() { } } + barrier(); + memoryBarrierBuffer(); + if (volume > 0.0f) { float density = minimal.mass / volume; @@ -44,6 +50,9 @@ void main() { //mass = density * volume; } + barrier(); + memoryBarrierBuffer(); + particles[gl_GlobalInvocationID.x].minimal.size = sphere_radius(volume); particles[gl_GlobalInvocationID.x].minimal.mass = mass; } diff --git a/projects/wobble_bobble/shaders/transform_particles_to_grid.comp b/projects/wobble_bobble/shaders/transform_particles_to_grid.comp index 0ccc6eb2294b898ecbaad73404e2dd9e523ddcb3..9bae58efb32d820d999df55ad12aa9174dc05a45 100644 --- a/projects/wobble_bobble/shaders/transform_particles_to_grid.comp +++ b/projects/wobble_bobble/shaders/transform_particles_to_grid.comp @@ -55,6 +55,9 @@ void main() { gridValue.xyz /= gridValue.w; } + barrier(); + memoryBarrierShared(); + imageStore( gridImage, ivec3(gl_GlobalInvocationID), diff --git a/projects/wobble_bobble/shaders/update_grid_forces.comp b/projects/wobble_bobble/shaders/update_grid_forces.comp index 3277986450fb9d571a5f362e7ed1692252fb39ef..0cc83a26e65ab07a223aa1f38d219a87aac8ffdf 100644 --- a/projects/wobble_bobble/shaders/update_grid_forces.comp +++ b/projects/wobble_bobble/shaders/update_grid_forces.comp @@ -41,6 +41,8 @@ void main() { } barrier(); + memoryBarrierBuffer(); + memoryBarrierShared(); memoryBarrierImage(); const vec3 gridResolution = vec3(imageSize(gridImage)); @@ -128,6 +130,11 @@ void main() { velocity = mix(velocity, -velocity, invert); + barrier(); + memoryBarrierBuffer(); + memoryBarrierShared(); + memoryBarrierImage(); + imageStore( gridForceImage, ivec3(gl_GlobalInvocationID), diff --git a/projects/wobble_bobble/shaders/update_particle_deformation.comp b/projects/wobble_bobble/shaders/update_particle_deformation.comp index 73d8961ad7454b03176a92612bed0b5e5d8ad423..a8a89bc55e93a71fac9977a810e0eb8e0eb44ce1 100644 --- a/projects/wobble_bobble/shaders/update_particle_deformation.comp +++ b/projects/wobble_bobble/shaders/update_particle_deformation.comp @@ -47,12 +47,18 @@ void main() { } } + barrier(); + memoryBarrierBuffer(); + mat3 deformation_elastic = deformation; if (dt > 0.0f) { deformation_elastic = (mat3(1.0f) + dt * velocity_gradient) * deformation; } + barrier(); + memoryBarrierBuffer(); + particles[gl_GlobalInvocationID.x].deformation = mat4(deformation_elastic); } } \ No newline at end of file diff --git a/projects/wobble_bobble/shaders/update_particle_positions.comp b/projects/wobble_bobble/shaders/update_particle_positions.comp index 6351cdde0e5ee20c6c1c1bd1f42caf4a2e524273..5e012f408098a419f95770e774547e419e686aa0 100644 --- a/projects/wobble_bobble/shaders/update_particle_positions.comp +++ b/projects/wobble_bobble/shaders/update_particle_positions.comp @@ -39,9 +39,13 @@ void main() { } } + barrier(); + memoryBarrierBuffer(); + particles[gl_GlobalInvocationID.x].minimal.position = position; particles[gl_GlobalInvocationID.x].minimal.velocity = velocity; } + barrier(); memoryBarrierBuffer(); } \ No newline at end of file diff --git a/projects/wobble_bobble/shaders/update_particle_velocities.comp b/projects/wobble_bobble/shaders/update_particle_velocities.comp index bc592ad60dc61e7382230a37db9fdc52aa321d89..d29b22e127ecd6ede0b9a0a4f42a6ac68dc281f4 100644 --- a/projects/wobble_bobble/shaders/update_particle_velocities.comp +++ b/projects/wobble_bobble/shaders/update_particle_velocities.comp @@ -58,6 +58,9 @@ void main() { } } + barrier(); + memoryBarrierBuffer(); + mat3 affine_C = mat3(0.0f); vec3 velocity_apic = vec3(0.0f); @@ -75,11 +78,15 @@ void main() { } } + barrier(); + memoryBarrierBuffer(); + vec3 velocity_alpha = mix(velocity_pic, velocity_flip, alpha); vec3 velocity_beta = mix(velocity_alpha, velocity_apic, beta); particles[gl_GlobalInvocationID.x].minimal.velocity = velocity_beta; } + barrier(); memoryBarrierBuffer(); } \ No newline at end of file