DeferredDirectionalLightPass.bsl 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  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. {
  54. Language = "GLSL";
  55. Pass =
  56. {
  57. DepthRead = false;
  58. Common =
  59. {
  60. varying vec4 position;
  61. varying vec2 uv0;
  62. varying vec3 screenDir;
  63. };
  64. Vertex =
  65. {
  66. in vec2 bs_position;
  67. in vec2 bs_texcoord0;
  68. out gl_PerVertex
  69. {
  70. vec4 gl_Position;
  71. };
  72. void main()
  73. {
  74. position = vec4(bs_position.x, bs_position.y, 0, 1);
  75. uv0 = bs_texcoord0;
  76. screenDir = (gMatInvProj * position).xyz - gViewOrigin.xyz;
  77. gl_Position = position;
  78. }
  79. };
  80. Fragment =
  81. {
  82. out vec4 fragColor;
  83. void main()
  84. {
  85. GBufferData gBufferData = getGBufferData(uv0);
  86. if(gBufferData.worldNormal.w > 0.0f)
  87. {
  88. vec3 cameraDir = normalize(screenDir);
  89. vec3 worldPosition = screenDir * gBufferData.depth + gViewOrigin;
  90. LightData lightData = getLightData();
  91. fragColor = getLighting(worldPosition, uv0, gBufferData, lightData);
  92. }
  93. else
  94. fragColor = vec4(0.0f, 0.0f, 0.0f, 0.0f);
  95. }
  96. };
  97. };
  98. };