60 lines
1.6 KiB
Plaintext
60 lines
1.6 KiB
Plaintext
// Copyright (c) 2012-2024 Wojciech Figat. All rights reserved.
|
|
|
|
#include "./Flax/Common.hlsl"
|
|
|
|
META_CB_BEGIN(0, Data)
|
|
float4x4 ViewProjection;
|
|
float2 Padding;
|
|
float ClipPosZBias;
|
|
bool EnableDepthTest;
|
|
META_CB_END
|
|
|
|
struct VS2PS
|
|
{
|
|
float4 Position : SV_Position;
|
|
float4 Color : TEXCOORD0;
|
|
};
|
|
|
|
Texture2D SceneDepthTexture : register(t0);
|
|
|
|
META_VS(true, FEATURE_LEVEL_ES2)
|
|
META_VS_IN_ELEMENT(POSITION, 0, R32G32B32_FLOAT, 0, ALIGN, PER_VERTEX, 0, true)
|
|
META_VS_IN_ELEMENT(COLOR, 0, R8G8B8A8_UNORM, 0, ALIGN, PER_VERTEX, 0, true)
|
|
VS2PS VS(float3 Position : POSITION, float4 Color : COLOR)
|
|
{
|
|
VS2PS output;
|
|
output.Position = mul(float4(Position, 1), ViewProjection);
|
|
output.Position.z += ClipPosZBias;
|
|
output.Color = Color;
|
|
return output;
|
|
}
|
|
|
|
META_PS(true, FEATURE_LEVEL_ES2)
|
|
META_PERMUTATION_2(USE_DEPTH_TEST=0,USE_FAKE_LIGHTING=0)
|
|
META_PERMUTATION_2(USE_DEPTH_TEST=0,USE_FAKE_LIGHTING=1)
|
|
META_PERMUTATION_2(USE_DEPTH_TEST=1,USE_FAKE_LIGHTING=0)
|
|
META_PERMUTATION_2(USE_DEPTH_TEST=1,USE_FAKE_LIGHTING=1)
|
|
float4 PS(VS2PS input) : SV_Target
|
|
{
|
|
#if USE_DEPTH_TEST
|
|
// Depth test manually if compositing editor primitives
|
|
FLATTEN
|
|
if (EnableDepthTest)
|
|
{
|
|
float sceneDepthDeviceZ = SceneDepthTexture.Load(int3(input.Position.xy, 0)).r;
|
|
float interpolatedDeviceZ = input.Position.z;
|
|
clip(sceneDepthDeviceZ - interpolatedDeviceZ);
|
|
}
|
|
#endif
|
|
|
|
float4 color = input.Color;
|
|
#if USE_FAKE_LIGHTING
|
|
// Reconstruct view normal and calculate faked lighting
|
|
float depth = input.Position.z * 10000;
|
|
float3 n = normalize(float3(-ddx(depth), -ddy(depth), 1.0f));
|
|
color.rgb *= saturate(abs(dot(n, float3(0, 1, 0))) + 0.5f);
|
|
#endif
|
|
|
|
return color;
|
|
}
|