halo.glslv 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. #version GLSL_VERSION
  2. /*==============================================================================
  3. VARS
  4. ==============================================================================*/
  5. #var PRECISION highp
  6. #var WATER_EFFECTS 0
  7. #var DISABLE_FOG 0
  8. #var SKY_STARS 0
  9. #var STATIC_BATCH 0
  10. /*============================================================================*/
  11. #include <std.glsl>
  12. #include <math.glslv>
  13. #include <to_world.glslv>
  14. uniform mat3 u_view_tsr;
  15. uniform mat4 u_proj_matrix;
  16. uniform PRECISION float u_halo_size;
  17. uniform vec3 u_camera_eye;
  18. #if STATIC_BATCH
  19. // NOTE: mat3(0.0, 0.0, 0.0, --- trans
  20. // 1.0, --- scale
  21. // 0.0, 0.0, 0.0, 1.0, --- quat
  22. // 0.0);
  23. const mat3 u_model_tsr = mat3(0.0, 0.0, 0.0,
  24. 1.0,
  25. 0.0, 0.0, 0.0, 1.0,
  26. 0.0);
  27. #else
  28. uniform mat3 u_model_tsr;
  29. #endif
  30. /*==============================================================================
  31. SHADER INTERFACE
  32. ==============================================================================*/
  33. GLSL_IN vec3 a_position;
  34. GLSL_IN vec2 a_halo_bb_vertex;
  35. GLSL_IN float a_random_vals;
  36. //------------------------------------------------------------------------------
  37. GLSL_OUT vec2 v_texcoord;
  38. GLSL_OUT float v_vertex_random;
  39. #if WATER_EFFECTS && !DISABLE_FOG
  40. GLSL_OUT vec4 v_position_world;
  41. #endif
  42. /*==============================================================================
  43. MAIN
  44. ==============================================================================*/
  45. void main(void) {
  46. mat3 view_tsr = u_view_tsr;
  47. mat3 model_tsr = u_model_tsr;
  48. vec3 position = tsr9_transform(model_tsr, a_position);
  49. v_texcoord = a_halo_bb_vertex * 2.0 - 1.0;
  50. //random value for every halo (0..1)
  51. v_vertex_random = a_random_vals;
  52. #if SKY_STARS
  53. mat3 bb_tsr = billboard_spherical(position, view_tsr);
  54. mat3 view_copy = view_tsr;
  55. view_copy[0][0] = 0.0;
  56. view_copy[0][1] = 0.0;
  57. view_copy[0][2] = 0.0;
  58. #else
  59. mat3 bb_tsr = billboard_spherical(position, view_tsr);
  60. #endif
  61. vec2 halo_bb_vertex = (a_halo_bb_vertex * 2.0 - 1.0) * u_halo_size;
  62. vec3 pos_local = vec3(halo_bb_vertex[0], 0.0, halo_bb_vertex[1]);
  63. vec3 pos_world = tsr9_transform(bb_tsr, pos_local);
  64. #if SKY_STARS
  65. vec4 pos_clip = u_proj_matrix * vec4(tsr9_transform(view_copy, pos_world), 1.0);
  66. pos_clip.z = 0.99999 * pos_clip.w;
  67. # if WATER_EFFECTS && !DISABLE_FOG
  68. v_position_world = vec4(pos_world, 1.0);
  69. # endif
  70. #else
  71. vec4 pos_clip = u_proj_matrix * vec4(tsr9_transform(view_tsr, pos_world), 1.0);
  72. #endif
  73. gl_Position = pos_clip;
  74. }