chunkLights.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. // Copyright 2016 The G3N Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style
  3. // license that can be found in the LICENSE file.
  4. package shader
  5. func init() {
  6. AddChunk("lights", chunkLights)
  7. }
  8. const chunkLights = `
  9. {{if .AmbientLightsMax}}
  10. // Ambient lights uniforms
  11. uniform vec3 AmbientLightColor[{{.AmbientLightsMax}}];
  12. {{end}}
  13. {{if .DirLightsMax}}
  14. // Directional lights uniform array. Each directional light uses 2 elements
  15. uniform vec3 DirLight[2*{{.DirLightsMax}}];
  16. // Macros to access elements inside the DirectionalLight uniform array
  17. #define DirLightColor(a) DirLight[2*a]
  18. #define DirLightPosition(a) DirLight[2*a+1]
  19. {{end}}
  20. {{if .PointLightsMax}}
  21. // Point lights uniform array. Each point light uses 3 elements
  22. uniform vec3 PointLight[3*{{.PointLightsMax}}];
  23. // Macros to access elements inside the PointLight uniform array
  24. #define PointLightColor(a) PointLight[3*a]
  25. #define PointLightPosition(a) PointLight[3*a+1]
  26. #define PointLightLinearDecay(a) PointLight[3*a+2].x
  27. #define PointLightQuadraticDecay(a) PointLight[3*a+2].y
  28. {{end}}
  29. {{if .SpotLightsMax}}
  30. // Spot lights uniforms. Each spot light uses 5 elements
  31. uniform vec3 SpotLight[5*{{.SpotLightsMax}}];
  32. // Macros to access elements inside the PointLight uniform array
  33. #define SpotLightColor(a) SpotLight[5*a]
  34. #define SpotLightPosition(a) SpotLight[5*a+1]
  35. #define SpotLightDirection(a) SpotLight[5*a+2]
  36. #define SpotLightAngularDecay(a) SpotLight[5*a+3].x
  37. #define SpotLightCutoffAngle(a) SpotLight[5*a+3].y
  38. #define SpotLightLinearDecay(a) SpotLight[5*a+3].z
  39. #define SpotLightQuadraticDecay(a) SpotLight[5*a+4].x
  40. {{end}}
  41. `