specular_merge.glsl 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. #[vertex]
  2. #version 450
  3. #VERSION_DEFINES
  4. #if defined(USE_MULTIVIEW) && defined(has_VK_KHR_multiview)
  5. #extension GL_EXT_multiview : enable
  6. #endif
  7. #ifdef USE_MULTIVIEW
  8. #ifdef has_VK_KHR_multiview
  9. #define ViewIndex gl_ViewIndex
  10. #else // has_VK_KHR_multiview
  11. // !BAS! This needs to become an input once we implement our fallback!
  12. #define ViewIndex 0
  13. #endif // has_VK_KHR_multiview
  14. #else // USE_MULTIVIEW
  15. // Set to zero, not supported in non stereo
  16. #define ViewIndex 0
  17. #endif //USE_MULTIVIEW
  18. #ifdef USE_MULTIVIEW
  19. layout(location = 0) out vec3 uv_interp;
  20. #else // USE_MULTIVIEW
  21. layout(location = 0) out vec2 uv_interp;
  22. #endif //USE_MULTIVIEW
  23. void main() {
  24. vec2 base_arr[4] = vec2[](vec2(0.0, 0.0), vec2(0.0, 1.0), vec2(1.0, 1.0), vec2(1.0, 0.0));
  25. #ifdef USE_MULTIVIEW
  26. uv_interp = vec3(base_arr[gl_VertexIndex], ViewIndex);
  27. gl_Position = vec4(uv_interp.xy * 2.0 - 1.0, 0.0, 1.0);
  28. #else
  29. uv_interp = base_arr[gl_VertexIndex];
  30. gl_Position = vec4(uv_interp * 2.0 - 1.0, 0.0, 1.0);
  31. #endif
  32. }
  33. #[fragment]
  34. #version 450
  35. #VERSION_DEFINES
  36. #if defined(USE_MULTIVIEW) && defined(has_VK_KHR_multiview)
  37. #extension GL_EXT_multiview : enable
  38. #endif
  39. #ifdef USE_MULTIVIEW
  40. #ifdef has_VK_KHR_multiview
  41. #define ViewIndex gl_ViewIndex
  42. #else // has_VK_KHR_multiview
  43. // !BAS! This needs to become an input once we implement our fallback!
  44. #define ViewIndex 0
  45. #endif // has_VK_KHR_multiview
  46. #else // USE_MULTIVIEW
  47. // Set to zero, not supported in non stereo
  48. #define ViewIndex 0
  49. #endif //USE_MULTIVIEW
  50. #ifdef USE_MULTIVIEW
  51. layout(location = 0) in vec3 uv_interp;
  52. #else // USE_MULTIVIEW
  53. layout(location = 0) in vec2 uv_interp;
  54. #endif //USE_MULTIVIEW
  55. #ifdef USE_MULTIVIEW
  56. layout(set = 0, binding = 0) uniform sampler2DArray specular;
  57. #else // USE_MULTIVIEW
  58. layout(set = 0, binding = 0) uniform sampler2D specular;
  59. #endif //USE_MULTIVIEW
  60. #ifdef MODE_SSR
  61. #ifdef USE_MULTIVIEW
  62. layout(set = 1, binding = 0) uniform sampler2DArray ssr;
  63. #else // USE_MULTIVIEW
  64. layout(set = 1, binding = 0) uniform sampler2D ssr;
  65. #endif //USE_MULTIVIEW
  66. #endif
  67. #ifdef MODE_MERGE
  68. #ifdef USE_MULTIVIEW
  69. layout(set = 2, binding = 0) uniform sampler2DArray diffuse;
  70. #else // USE_MULTIVIEW
  71. layout(set = 2, binding = 0) uniform sampler2D diffuse;
  72. #endif //USE_MULTIVIEW
  73. #endif
  74. layout(location = 0) out vec4 frag_color;
  75. void main() {
  76. frag_color.rgb = texture(specular, uv_interp).rgb;
  77. frag_color.a = 0.0;
  78. #ifdef MODE_SSR
  79. vec4 ssr_color = texture(ssr, uv_interp);
  80. frag_color.rgb = mix(frag_color.rgb, ssr_color.rgb, ssr_color.a);
  81. #endif
  82. #ifdef MODE_MERGE
  83. frag_color += texture(diffuse, uv_interp);
  84. #endif
  85. //added using additive blend
  86. }