ForwardShadingParticles.ankiprog 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. <!--
  2. Copyright (C) 2009-2018, Panagiotis Christopoulos Charitos and contributors.
  3. All rights reserved.
  4. Code licensed under the BSD License.
  5. http://www.anki3d.org/LICENSE
  6. -->
  7. <shaderProgram>
  8. <descriptorSet index="1"/>
  9. <mutators>
  10. <mutator name="ANIMATED_TEXTURE" values="0 1"/>
  11. <mutator name="LIGHT" values="0 1"/>
  12. </mutators>
  13. <shaders>
  14. <shader type="vert">
  15. <inputs>
  16. <input name="mvp" type="mat4"/>
  17. <input name="cameraRotMat" type="mat3"/>
  18. </inputs>
  19. <source><![CDATA[
  20. #include "shaders/ForwardShadingCommonVert.glsl"
  21. layout(location = SCALE_LOCATION) in float in_scale;
  22. layout(location = ALPHA_LOCATION) in float in_alpha;
  23. layout(location = 0) flat out float out_alpha;
  24. layout(location = 1) out vec2 out_uv;
  25. layout(location = 2) out vec3 out_worldPos;
  26. void main()
  27. {
  28. out_uv = vec2(gl_VertexID & 1, gl_VertexID >> 1);
  29. out_worldPos = cameraRotMat * vec3((out_uv - 0.5) * in_scale, 0.0) + in_position;
  30. gl_Position = mvp * vec4(out_worldPos, 1.0);
  31. out_alpha = in_alpha;
  32. }
  33. ]]>
  34. </source>
  35. </shader>
  36. <shader type="frag">
  37. <inputs>
  38. <input name="diffuseMap" type="sampler2D">
  39. <mutators>
  40. <mutator name="ANIMATED_TEXTURE" values="0"/>
  41. </mutators>
  42. </input>
  43. <input name="diffuseMapArr" type="sampler2DArray">
  44. <mutators>
  45. <mutator name="ANIMATED_TEXTURE" values="1"/>
  46. </mutators>
  47. </input>
  48. <input name="animationPeriod" type="float" const="1">
  49. <mutators>
  50. <mutator name="ANIMATED_TEXTURE" values="1"/>
  51. </mutators>
  52. </input>
  53. <input name="colorScale" type="vec4" const="1"/>
  54. <input name="colorBias" type="vec4" const="1"/>
  55. </inputs>
  56. <source><![CDATA[
  57. #include "shaders/ForwardShadingCommonFrag.glsl"
  58. layout(location = 0) flat in float in_alpha;
  59. layout(location = 1) in vec2 in_uv;
  60. layout(location = 2) in vec3 in_worldPos;
  61. void main()
  62. {
  63. #if ANIMATED_TEXTURE == 1
  64. vec4 texCol = readAnimatedTextureRgba(diffuseMapArr, animationPeriod, in_uv, anki_u_time);
  65. #else
  66. vec4 texCol = texture(diffuseMap, in_uv);
  67. #endif
  68. #if LIGHT
  69. texCol.rgb = computeLightColor(texCol.rgb, in_worldPos);
  70. #endif
  71. vec4 colScale = colorScale;
  72. colScale.a *= in_alpha;
  73. particleAlpha(texCol, colScale, colorBias);
  74. }
  75. ]]>
  76. </source>
  77. </shader>
  78. </shaders>
  79. </shaderProgram>