DeferredDirectionalLightPass.bsl 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. #include "$ENGINE$\DeferredLightPass.bslinc"
  2. Technique
  3. : inherits("DeferredLightPass") =
  4. {
  5. Language = "HLSL11";
  6. Pass =
  7. {
  8. DepthRead = false;
  9. Common =
  10. {
  11. struct VStoFS
  12. {
  13. float4 position : SV_POSITION;
  14. float2 uv0 : TEXCOORD0;
  15. float3 screenDir : TEXCOORD1;
  16. };
  17. };
  18. Vertex =
  19. {
  20. struct VertexInput
  21. {
  22. float2 screenPos : POSITION;
  23. float2 uv0 : TEXCOORD0;
  24. };
  25. VStoFS main(VertexInput input)
  26. {
  27. VStoFS output;
  28. output.position = float4(input.screenPos, 0, 1);
  29. output.uv0 = input.uv0;
  30. output.screenDir = mul(gMatInvProj, float4(input.screenPos, 1, 0)).xyz - gViewOrigin.xyz;
  31. return output;
  32. }
  33. };
  34. Fragment =
  35. {
  36. float4 main(VStoFS input) : SV_Target0
  37. {
  38. GBufferData gBufferData = getGBufferData(input.uv0);
  39. if(gBufferData.worldNormal.w > 0.0f)
  40. {
  41. float3 cameraDir = normalize(input.screenDir);
  42. float3 worldPosition = input.screenDir * gBufferData.depth + gViewOrigin;
  43. LightData lightData = getLightData();
  44. return getLighting(worldPosition, input.uv0, gBufferData, lightData);
  45. }
  46. else
  47. return float4(0.0f, 0.0f, 0.0f, 0.0f);
  48. }
  49. };
  50. };
  51. };
  52. Technique
  53. : inherits("DeferredLightPass") =
  54. {
  55. Language = "GLSL";
  56. Pass =
  57. {
  58. DepthRead = false;
  59. Common =
  60. {
  61. varying vec4 position;
  62. varying vec2 uv0;
  63. varying vec3 screenDir;
  64. };
  65. Vertex =
  66. {
  67. in vec2 bs_position;
  68. in vec2 bs_texcoord0;
  69. out gl_PerVertex
  70. {
  71. vec4 gl_Position;
  72. };
  73. void main()
  74. {
  75. position = vec4(bs_position.x, bs_position.y, 0, 1);
  76. uv0 = bs_texcoord0;
  77. screenDir = (gMatInvProj * position).xyz - gViewOrigin.xyz;
  78. gl_Position = position;
  79. }
  80. };
  81. Fragment =
  82. {
  83. out vec4 fragColor;
  84. void main()
  85. {
  86. GBufferData gBufferData = getGBufferData(uv0);
  87. if(gBufferData.worldNormal.w > 0.0f)
  88. {
  89. vec3 cameraDir = normalize(screenDir);
  90. vec3 worldPosition = screenDir * gBufferData.depth + gViewOrigin;
  91. LightData lightData = getLightData();
  92. fragColor = getLighting(worldPosition, uv0, gBufferData, lightData);
  93. }
  94. else
  95. fragColor = vec4(0.0f, 0.0f, 0.0f, 0.0f);
  96. }
  97. };
  98. };
  99. };