screen.frag 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. /* screen.frag -- Base of custom screen fragment shader
  2. *
  3. * Copyright (c) 2025-2026 Le Juez Victor
  4. *
  5. * This software is provided 'as-is', without any express or implied warranty.
  6. * For conditions of distribution and use, see accompanying LICENSE file.
  7. */
  8. #version 330 core
  9. /* === Includes === */
  10. #include "../include/blocks/view.glsl"
  11. /* === Varyings === */
  12. noperspective in vec2 vTexCoord;
  13. /* === Uniforms === */
  14. uniform sampler2D uSceneTex;
  15. uniform sampler2D uNormalTex;
  16. uniform sampler2D uDepthTex;
  17. uniform vec2 uResolution;
  18. uniform vec2 uTexelSize;
  19. /* === Fragments === */
  20. out vec4 FragColor;
  21. /* === Built-In Input Variables === */
  22. vec2 TEXCOORD = vec2(0.0);
  23. ivec2 PIXCOORD = ivec2(0);
  24. vec2 TEXEL_SIZE = vec2(0.0);
  25. vec2 RESOLUTION = vec2(0.0);
  26. float ASPECT = 0.0;
  27. /* === Built-In Output Variables === */
  28. vec3 COLOR = vec3(0.0);
  29. /* === User Callable === */
  30. vec3 FetchColor(ivec2 pixCoord)
  31. {
  32. return texelFetch(uSceneTex, pixCoord, 0).rgb;
  33. }
  34. vec3 SampleColor(vec2 texCoord)
  35. {
  36. return texture(uSceneTex, texCoord).rgb;
  37. }
  38. float FetchDepth(ivec2 pixCoord)
  39. {
  40. return texelFetch(uDepthTex, pixCoord, 0).r;
  41. }
  42. float SampleDepth(vec2 texCoord)
  43. {
  44. return texture(uDepthTex, texCoord).r;
  45. }
  46. float FetchDepth01(ivec2 pixCoord)
  47. {
  48. float z = texelFetch(uDepthTex, pixCoord, 0).r;
  49. return clamp((z - uView.near) / (uView.far - uView.near), 0.0, 1.0);
  50. }
  51. float SampleDepth01(vec2 texCoord)
  52. {
  53. float z = texture(uDepthTex, texCoord).r;
  54. return clamp((z - uView.near) / (uView.far - uView.near), 0.0, 1.0);
  55. }
  56. vec3 FetchPosition(ivec2 pixCoord)
  57. {
  58. return V_GetViewPosition(uDepthTex, pixCoord);
  59. }
  60. vec3 SamplePosition(vec2 texCoord)
  61. {
  62. return V_GetViewPosition(uDepthTex, texCoord);
  63. }
  64. vec3 FetchNormal(ivec2 pixCoord)
  65. {
  66. return V_GetViewNormal(uNormalTex, pixCoord);
  67. }
  68. vec3 SampleNormal(vec2 texCoord)
  69. {
  70. return V_GetViewNormal(uNormalTex, texCoord);
  71. }
  72. /* === Main function === */
  73. #define fragment()
  74. void main()
  75. {
  76. TEXCOORD = vTexCoord;
  77. PIXCOORD = ivec2(gl_FragCoord.xy);
  78. TEXEL_SIZE = uTexelSize;
  79. RESOLUTION = uResolution;
  80. ASPECT = uView.aspect;
  81. fragment();
  82. FragColor = vec4(COLOR, 1.0);
  83. }