point_light.vert 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. #version 450
  2. const vec2 OFFSETS[6] = vec2[]
  3. (
  4. vec2(-1.f, -1.f),
  5. vec2(-1.f, 1.f),
  6. vec2(1.f, -1.f),
  7. vec2(1.f, -1.f),
  8. vec2(-1.f, 1.f),
  9. vec2(1.f, 1.f)
  10. );
  11. layout (location = 0) out vec2 frag_offset;
  12. struct PointLight
  13. {
  14. vec4 position; // w is radius
  15. vec4 color; // w is intensity
  16. };
  17. layout (set = 0, binding = 0) uniform GlobalUBO
  18. {
  19. // MATRICES
  20. mat4 view;
  21. mat4 viewInverse;
  22. mat4 viewProjection;
  23. // LIGHTING
  24. vec4 globalLightDirection;
  25. vec4 ambientLighting;
  26. // POINT LIGHTS
  27. PointLight pointLights[8];
  28. int numLights;
  29. } ubo;
  30. layout(push_constant) uniform Push
  31. {
  32. vec4 position; // w is radius
  33. vec4 color; // w is intensity
  34. } push;
  35. void main()
  36. {
  37. frag_offset = OFFSETS[gl_VertexIndex];
  38. vec3 cam_world_right = {ubo.view[0][0], ubo.view[1][0], ubo.view[2][0]};
  39. vec3 cam_world_up = {ubo.view[0][1], ubo.view[1][1], ubo.view[2][1]};
  40. vec3 world_pos = push.position.xyz
  41. + push.position.w * frag_offset.x * cam_world_right
  42. + push.position.w * frag_offset.y * cam_world_up;
  43. gl_Position = ubo.viewProjection * vec4(world_pos, 1.f);
  44. }