| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- // Copyright (C) 2009-2022, Panagiotis Christopoulos Charitos and contributors.
- // All rights reserved.
- // Code licensed under the BSD License.
- // http://www.anki3d.org/LICENSE
- #pragma anki mutator METHOD 0 1 // 0: solid colod, 1: 2D image
- #pragma anki start vert
- #include <AnKi/Shaders/QuadVert.glsl>
- #pragma anki end
- #pragma anki start frag
- #include <AnKi/Shaders/Functions.glsl>
- #include <AnKi/Shaders/Include/TraditionalDeferredShadingTypes.h>
- layout(location = 0) in Vec2 in_uv;
- layout(location = 0) out ANKI_RP Vec3 out_color;
- layout(push_constant, row_major, std140) uniform b_pc
- {
- DeferredSkyboxUniforms u_unis;
- };
- layout(binding = 0) uniform sampler u_nearestAnyClampSampler;
- layout(binding = 1) uniform texture2D u_depthTex;
- #if METHOD == 1
- layout(binding = 2) uniform sampler u_trilinearAnySampler;
- layout(binding = 3) uniform ANKI_RP texture2D u_envMapTex;
- #endif
- void main()
- {
- const Vec2 uvToRead = fma(Vec2(gl_FragCoord.xy), u_unis.m_inputTexUvScale, u_unis.m_inputTexUvBias);
- const F32 depth = textureLod(u_depthTex, u_nearestAnyClampSampler, uvToRead, 0.0).r;
- if(depth != 1.0)
- {
- discard;
- }
- #if METHOD == 0
- out_color = u_unis.m_solidColor;
- #else
- const F32 depthFar = 1.0;
- const Vec2 ndc = UV_TO_NDC(in_uv);
- const Vec4 worldPos4 = u_unis.m_invertedViewProjectionMat * Vec4(ndc, depthFar, 1.0);
- const Vec3 worldPos = worldPos4.xyz / worldPos4.w;
- const Vec3 eyeToFrag = normalize(worldPos - u_unis.m_cameraPos);
- const Vec2 uv = equirectangularMapping(eyeToFrag);
- out_color = texture(u_envMapTex, u_trilinearAnySampler, uv).rgb;
- #endif
- }
- #pragma anki end
|