ImageRender.vert 832 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. #version 450
  2. layout (constant_id = 0) const bool InvertY = false;
  3. layout(location = 0) in vec2 Position;
  4. layout(location = 0) out vec2 tex_coord;
  5. layout(location = 1) out vec4 bounds;
  6. layout(location = 2) out vec2 pos;
  7. struct Item
  8. {
  9. mat4 source;
  10. vec4 color;
  11. mat4 model;
  12. mat4 projection;
  13. vec4 scissor;
  14. };
  15. layout(std430, binding = 0) readonly buffer Items
  16. {
  17. mat4 view;
  18. Item items[];
  19. };
  20. void main()
  21. {
  22. Item item = items[gl_InstanceIndex];
  23. tex_coord = (item.source * vec4(Position, 0, 1)).xy;
  24. // scissor bounds
  25. vec2 start = item.scissor.xy;
  26. vec2 end = start + item.scissor.zw;
  27. bounds = vec4(start, end);
  28. gl_Position = item.projection * view * item.model * vec4(Position, 0, 1);
  29. pos = gl_Position.xy;
  30. if(!InvertY)
  31. gl_Position.y = -gl_Position.y;
  32. }