| #version 310 es | 
 |  | 
 |  | 
 | struct SimParams { | 
 |   float deltaT; | 
 |   float rule1Distance; | 
 |   float rule2Distance; | 
 |   float rule3Distance; | 
 |   float rule1Scale; | 
 |   float rule2Scale; | 
 |   float rule3Scale; | 
 | }; | 
 |  | 
 | struct Particle { | 
 |   vec2 pos; | 
 |   vec2 vel; | 
 | }; | 
 |  | 
 | struct Particles { | 
 |   Particle particles[5]; | 
 | }; | 
 |  | 
 | layout(binding = 0, std140) | 
 | uniform params_block_1_ubo { | 
 |   SimParams inner; | 
 | } v; | 
 | layout(binding = 1, std430) | 
 | buffer particlesA_block_1_ssbo { | 
 |   Particles inner; | 
 | } v_1; | 
 | layout(binding = 2, std430) | 
 | buffer particlesB_block_1_ssbo { | 
 |   Particles inner; | 
 | } v_2; | 
 | void comp_main_inner(uvec3 v_3) { | 
 |   uint index = v_3.x; | 
 |   if ((index >= 5u)) { | 
 |     return; | 
 |   } | 
 |   uint v_4 = min(index, 4u); | 
 |   vec2 vPos = v_1.inner.particles[v_4].pos; | 
 |   uint v_5 = min(index, 4u); | 
 |   vec2 vVel = v_1.inner.particles[v_5].vel; | 
 |   vec2 cMass = vec2(0.0f); | 
 |   vec2 cVel = vec2(0.0f); | 
 |   vec2 colVel = vec2(0.0f); | 
 |   int cMassCount = 0; | 
 |   int cVelCount = 0; | 
 |   vec2 pos = vec2(0.0f); | 
 |   vec2 vel = vec2(0.0f); | 
 |   { | 
 |     uint i = 0u; | 
 |     while(true) { | 
 |       if ((i < 5u)) { | 
 |       } else { | 
 |         break; | 
 |       } | 
 |       if ((i == index)) { | 
 |         { | 
 |           i = (i + 1u); | 
 |         } | 
 |         continue; | 
 |       } | 
 |       uint v_6 = min(i, 4u); | 
 |       pos = v_1.inner.particles[v_6].pos.xy; | 
 |       uint v_7 = min(i, 4u); | 
 |       vel = v_1.inner.particles[v_7].vel.xy; | 
 |       if ((distance(pos, vPos) < v.inner.rule1Distance)) { | 
 |         cMass = (cMass + pos); | 
 |         cMassCount = (cMassCount + 1); | 
 |       } | 
 |       if ((distance(pos, vPos) < v.inner.rule2Distance)) { | 
 |         colVel = (colVel - (pos - vPos)); | 
 |       } | 
 |       if ((distance(pos, vPos) < v.inner.rule3Distance)) { | 
 |         cVel = (cVel + vel); | 
 |         cVelCount = (cVelCount + 1); | 
 |       } | 
 |       { | 
 |         i = (i + 1u); | 
 |       } | 
 |       continue; | 
 |     } | 
 |   } | 
 |   if ((cMassCount > 0)) { | 
 |     vec2 v_8 = cMass; | 
 |     float v_9 = float(cMassCount); | 
 |     vec2 v_10 = (v_8 / vec2(v_9, float(cMassCount))); | 
 |     cMass = (v_10 - vPos); | 
 |   } | 
 |   if ((cVelCount > 0)) { | 
 |     vec2 v_11 = cVel; | 
 |     float v_12 = float(cVelCount); | 
 |     cVel = (v_11 / vec2(v_12, float(cVelCount))); | 
 |   } | 
 |   vVel = (((vVel + (cMass * v.inner.rule1Scale)) + (colVel * v.inner.rule2Scale)) + (cVel * v.inner.rule3Scale)); | 
 |   vVel = (normalize(vVel) * clamp(length(vVel), 0.0f, 0.10000000149011611938f)); | 
 |   vPos = (vPos + (vVel * v.inner.deltaT)); | 
 |   if ((vPos.x < -1.0f)) { | 
 |     vPos.x = 1.0f; | 
 |   } | 
 |   if ((vPos.x > 1.0f)) { | 
 |     vPos.x = -1.0f; | 
 |   } | 
 |   if ((vPos.y < -1.0f)) { | 
 |     vPos.y = 1.0f; | 
 |   } | 
 |   if ((vPos.y > 1.0f)) { | 
 |     vPos.y = -1.0f; | 
 |   } | 
 |   uint v_13 = min(index, 4u); | 
 |   v_2.inner.particles[v_13].pos = vPos; | 
 |   uint v_14 = min(index, 4u); | 
 |   v_2.inner.particles[v_14].vel = vVel; | 
 | } | 
 | layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in; | 
 | void main() { | 
 |   comp_main_inner(gl_GlobalInvocationID); | 
 | } |