Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.

60 wiersze
1.4 KiB

  1. #version 450 core
  2. layout (location = 0) in vec2 pos_min;
  3. layout (location = 1) in vec2 pos_max;
  4. layout (location = 2) in vec2 tex_min;
  5. layout (location = 3) in vec2 tex_max;
  6. layout (location = 4) in vec4 color;
  7. layout (std140, binding = 0) uniform Camera {
  8. mat4 projection;
  9. mat4 view;
  10. vec2 size;
  11. } camera;
  12. layout (location = 1) uniform mat4 model;
  13. out FragmentData {
  14. vec2 tex_coord;
  15. vec4 color;
  16. } data;
  17. void main() {
  18. vec2 position = vec2(0.0);
  19. vec2 tex_coord = vec2(0.0);
  20. switch (gl_VertexID) {
  21. case 0:
  22. position = vec2(pos_min.x, pos_max.y);
  23. tex_coord = vec2(tex_min.x, tex_max.y);
  24. break;
  25. case 1:
  26. position = vec2(pos_min.x, pos_min.y);
  27. tex_coord = vec2(tex_min.x, tex_min.y);
  28. break;
  29. case 2:
  30. position = vec2(pos_max.x, pos_max.y);
  31. tex_coord = vec2(tex_max.x, tex_max.y);
  32. break;
  33. case 3:
  34. position = vec2(pos_max.x, pos_min.y);
  35. tex_coord = vec2(tex_max.x, tex_min.y);
  36. break;
  37. }
  38. mat4 ortho = mat4(
  39. vec4(2.0 / camera.size.x, 0.0, 0.0, 0.0),
  40. vec4(0.0, -2.0 / camera.size.y, 0.0, 0.0),
  41. vec4(0.0, 0.0, 1.0, 0.0),
  42. vec4(-1.0, 1.0, 1.0, 1.0)
  43. );
  44. gl_Position = ortho * vec4(position, 0.0, 1.0);
  45. data.tex_coord = tex_coord;
  46. data.color = color;
  47. }