fragment.fs 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. #version 430
  2. layout (location = 0) in vec3 pos;
  3. layout (location = 1) in vec2 tex;
  4. layout (location = 2) in vec4 vertexColor;
  5. uniform sampler2D samp;
  6. uniform mat4 viewMatrix;
  7. uniform mat4 modelMatrix;
  8. uniform vec3 ambientLight;
  9. struct Light
  10. {
  11. vec2 pos;
  12. float strength;
  13. vec3 color;
  14. };
  15. uniform Light lights[32];
  16. uniform bool useTexture;
  17. uniform bool useColor;
  18. uniform bool useLight;
  19. uniform bool useMixColor;
  20. uniform vec4 mixColor;
  21. in vec2 tc;
  22. in vec2 loc;
  23. in vec4 vColor;
  24. out vec4 color;
  25. vec4 getLight()
  26. {
  27. vec3 light = vec3(0, 0, 0);
  28. for(int i = 0; i < 32; i++)
  29. {
  30. light += lights[i].color * max(1 - lights[i].strength * length(loc - lights[i].pos), 0);
  31. }
  32. return vec4(min(light, vec3(1, 1, 1)), 1);
  33. }
  34. void main(void)
  35. {
  36. if(useTexture)
  37. {
  38. color = texture(samp, tc);
  39. if(color.a == 0.0)
  40. {
  41. discard;
  42. }
  43. if(useColor)
  44. {
  45. if(useMixColor)
  46. {
  47. color = (color + mixColor) * 0.5;
  48. }
  49. else
  50. {
  51. color = vColor;
  52. }
  53. }
  54. }
  55. else
  56. {
  57. color = vColor;
  58. }
  59. if(useLight)
  60. {
  61. color = pow(pow(color, vec4(1 / 2.2)) * vec4(ambientLight, 1.0) + getLight(), vec4(2.2));
  62. }
  63. }