pointfbo.vs 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. #START VS
  2. #version 330 core
  3. layout (location = 0) in vec3 in_position;
  4. layout (location = 1) in vec2 in_uv;
  5. layout (location = 2) in vec3 in_normals;
  6. layout (location = 3) in vec4 in_tangents;
  7. layout (location = 4) in vec4 in_color;
  8. layout (location = 5) in vec4 in_boneindex;
  9. layout (location = 6) in vec4 in_boneweights;
  10. layout (location = 7) in mat4 in_instancematrix;
  11. uniform mat4 u_bone_matrix[200];
  12. uniform bool u_has_skeleton;
  13. void main()
  14. {
  15. mat4 transform = in_instancematrix;
  16. if (u_has_skeleton == true) {
  17. mat4 skeleton = u_bone_matrix[int(in_boneindex.x*255)] * in_boneweights.x +
  18. u_bone_matrix[int(in_boneindex.y*255)] * in_boneweights.y +
  19. u_bone_matrix[int(in_boneindex.z*255)] * in_boneweights.z +
  20. u_bone_matrix[int(in_boneindex.w*255)] * in_boneweights.w;
  21. transform = in_instancematrix * skeleton;
  22. }
  23. gl_Position = transform * vec4(in_position, 1.0);
  24. }
  25. #END VS
  26. #START FS
  27. #version 330 core
  28. in vec4 frag;
  29. uniform vec3 u_light_pos;
  30. uniform float u_far_plane;
  31. uniform bool u_is_lit;
  32. void main()
  33. {
  34. if (!u_is_lit) {
  35. discard;
  36. }
  37. float light_distance = length(frag.xyz - u_light_pos);
  38. light_distance = light_distance / u_far_plane;
  39. gl_FragDepth = light_distance;
  40. }
  41. #END FS
  42. #START GS
  43. #version 330 core
  44. layout (triangles) in;
  45. layout (triangle_strip, max_vertices=18) out;
  46. uniform mat4 u_shadow_matrices[6];
  47. out vec4 frag;
  48. void main()
  49. {
  50. for (int face=0; face<6; ++face) {
  51. gl_Layer = face;
  52. for (int i=0; i<3; ++i) {
  53. frag = gl_in[i].gl_Position;
  54. gl_Position = u_shadow_matrices[face] * frag;
  55. EmitVertex();
  56. }
  57. EndPrimitive();
  58. }
  59. }
  60. #END GS