rendy 0.5.1

Higher-level graphics abstrations based on gfx-hal
#version 450

layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
// layout(set = 0, binding = 0, rgba32f) uniform imageBuffer posvelbuff;

layout(std430, set = 0, binding = 0) buffer _ {
    vec4 posvel[];
} posvelbuff;

void main() {
  float delta_time = 0.00001;
  int index = int(gl_GlobalInvocationID.x) + 1024 * int(gl_GlobalInvocationID.y);
  vec4 posvel = posvelbuff.posvel[index];
  vec2 pos = posvel.rg;
  vec2 vel = posvel.ba;
  pos += vel + (delta_time * delta_time) / 2;
  vel.y -= delta_time;
  
  if (pos.y < 0.0) {
    pos.y = -pos.y;
    vel.y *= -1.0;
  }

  if (pos.y > 1.0) {
    pos.y = 2.0 - pos.y;
    vel.y *= -1.0;
  }
  
  if (pos.x < 0.0) {
    pos.x = -pos.x;
    vel.x *= -1.0;
  }

  if (pos.x > 1.0) {
    pos.x = 2.0 - pos.x;
    vel.x *= -1.0;
  }

  vel = clamp(vel, vec2(-0.02, -0.02), vec2(0.02, 0.02));

  posvelbuff.posvel[index] = vec4(pos, vel);
}