static const float shadowDepthTextureSize = 1024.0f; cbuffer cbuffer_scene : register(b0, space0) { uint4 scene[9]; }; Texture2D shadowMap : register(t1, space0); SamplerComparisonState shadowSampler : register(s2, space0); struct FragmentInput { float3 shadowPos; float3 fragPos; float3 fragNorm; }; static const float3 albedo = float3(0.899999976f, 0.899999976f, 0.899999976f); static const float ambientFactor = 0.200000003f; struct tint_symbol_1 { float3 shadowPos : TEXCOORD0; float3 fragPos : TEXCOORD1; float3 fragNorm : TEXCOORD2; }; struct tint_symbol_2 { float4 value : SV_Target0; }; float4 main_inner(FragmentInput input) { float visibility = 0.0f; const float oneOverShadowDepthTextureSize = (1.0f / shadowDepthTextureSize); { [loop] for(int y = -1; (y <= 1); y = (y + 1)) { { [loop] for(int x = -1; (x <= 1); x = (x + 1)) { const float2 offset = float2((float(x) * oneOverShadowDepthTextureSize), (float(y) * oneOverShadowDepthTextureSize)); visibility = (visibility + shadowMap.SampleCmp(shadowSampler, (input.shadowPos.xy + offset), (input.shadowPos.z - 0.007f))); } } } } visibility = (visibility / 9.0f); const float lambertFactor = max(dot(normalize((asfloat(scene[8].xyz) - input.fragPos)), input.fragNorm), 0.0f); const float lightingFactor = min((ambientFactor + (visibility * lambertFactor)), 1.0f); return float4((lightingFactor * albedo), 1.0f); } tint_symbol_2 main(tint_symbol_1 tint_symbol) { const FragmentInput tint_symbol_4 = {tint_symbol.shadowPos, tint_symbol.fragPos, tint_symbol.fragNorm}; const float4 inner_result = main_inner(tint_symbol_4); tint_symbol_2 wrapper_result = (tint_symbol_2)0; wrapper_result.value = inner_result; return wrapper_result; }