ReflectionCubeDownsample.bsl 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. #include "$ENGINE$\PPBase.bslinc"
  2. Parameters =
  3. {
  4. int gCubeFace;
  5. SamplerCUBE gInputSamp : alias("gInputTex");
  6. TextureCUBE gInputTex;
  7. };
  8. Blocks =
  9. {
  10. Block Input;
  11. };
  12. Technique : inherits("PPBase") =
  13. {
  14. Language = "HLSL11";
  15. Pass =
  16. {
  17. Fragment =
  18. {
  19. cbuffer Input
  20. {
  21. int gCubeFace;
  22. }
  23. SamplerState gInputSamp;
  24. TextureCube gInputTex;
  25. float4 main(VStoFS input) : SV_Target0
  26. {
  27. float2 scaledUV = input.uv0 * 2.0f - 1.0f;
  28. float3 dir;
  29. if(gCubeFace == 0)
  30. dir = float3(1.0f, -scaledUV.y, -scaledUV.x);
  31. else if(gCubeFace == 1)
  32. dir = float3(-1.0f, -scaledUV.y, scaledUV.x);
  33. else if(gCubeFace == 2)
  34. dir = float3(scaledUV.x, 1.0f, scaledUV.y);
  35. else if(gCubeFace == 3)
  36. dir = float3(scaledUV.x, -1.0f, -scaledUV.y);
  37. else if(gCubeFace == 4)
  38. dir = float3(scaledUV.x, -scaledUV.y, 1.0f);
  39. else
  40. dir = float3(-scaledUV.x, -scaledUV.y, -1.0f);
  41. return gInputTex.Sample(gInputSamp, dir);
  42. }
  43. };
  44. };
  45. };
  46. Technique : inherits("PPBase") =
  47. {
  48. Language = "GLSL";
  49. Pass =
  50. {
  51. Fragment =
  52. {
  53. in VStoFS
  54. {
  55. layout(location = 0) vec2 uv0;
  56. } FSInput;
  57. layout(location = 0) out vec4 fragColor;
  58. layout(binding = 0) uniform Input
  59. {
  60. int gCubeFace;
  61. };
  62. layout(binding = 1) uniform samplerCube gInputTex;
  63. void main()
  64. {
  65. vec2 scaledUV = FSInput.uv0 * 2.0f - 1.0f;
  66. vec3 dir;
  67. if(gCubeFace == 0)
  68. dir = vec3(1.0f, -scaledUV.y, -scaledUV.x);
  69. else if(gCubeFace == 1)
  70. dir = vec3(-1.0f, -scaledUV.y, scaledUV.x);
  71. else if(gCubeFace == 2)
  72. dir = vec3(scaledUV.x, 1.0f, scaledUV.y);
  73. else if(gCubeFace == 3)
  74. dir = vec3(scaledUV.x, -1.0f, -scaledUV.y);
  75. else if(gCubeFace == 4)
  76. dir = vec3(scaledUV.x, -scaledUV.y, 1.0f);
  77. else
  78. dir = vec3(-scaledUV.x, -scaledUV.y, -1.0f);
  79. fragColor = texture(gInputTex, dir);
  80. }
  81. };
  82. };
  83. };