You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

47 lines
1.2 KiB

  1. #version 450 core
  2. #pragma include ./shared.glsl
  3. #pragma include ../misc/camera.glsl
  4. in VertexData vertexData[];
  5. layout (points) in;
  6. layout (triangle_strip, max_vertices = 4) out;
  7. out FragmentData fragmentData;
  8. flat out int textureId;
  9. void main() {
  10. VertexData d = vertexData[0];
  11. vec2 pos = d.pos;
  12. vec2 dir = d.dir * SHIP_SIZE * GLOW_SIZE;
  13. mat4 m = uCamera.projection * uCamera.view * mat4(
  14. vec4(dir.y, -dir.x, 0.0, 0.0),
  15. vec4(dir.x, dir.y, 0.0, 0.0),
  16. vec4( 0.0, 0.0, 0.0, 0.0),
  17. vec4(pos.x, pos.y, 0.0, 1.0));
  18. textureId = d.texture;
  19. fragmentData.color = d.color;
  20. gl_Position = m * vec4(-1.0, -1.0, 0.0, 1.0);
  21. fragmentData.texCoords = vec2(-1.0, 1.0);
  22. EmitVertex();
  23. gl_Position = m * vec4(-1.0, 1.0, 0.0, 1.0);
  24. fragmentData.texCoords = vec2(-1.0, -1.0);
  25. EmitVertex();
  26. gl_Position = m * vec4( 1.0, -1.0, 0.0, 1.0);
  27. fragmentData.texCoords = vec2( 1.0, 1.0);
  28. EmitVertex();
  29. gl_Position = m * vec4( 1.0, 1.0, 0.0, 1.0);
  30. fragmentData.texCoords = vec2( 1.0, -1.0);
  31. EmitVertex();
  32. EndPrimitive();
  33. }