Improve #1077 to use a single pixel shader with permutations
This commit is contained in:
BIN
Content/Shaders/DebugDraw.flax
(Stored with Git LFS)
BIN
Content/Shaders/DebugDraw.flax
(Stored with Git LFS)
Binary file not shown.
@@ -632,10 +632,10 @@ void DebugDrawService::Update()
|
|||||||
desc.VS = shader->GetVS("VS");
|
desc.VS = shader->GetVS("VS");
|
||||||
|
|
||||||
// Default
|
// Default
|
||||||
desc.PS = shader->GetPS("PSUnlit");
|
desc.PS = shader->GetPS("PS", 0);
|
||||||
desc.PrimitiveTopologyType = PrimitiveTopologyType::Line;
|
desc.PrimitiveTopologyType = PrimitiveTopologyType::Line;
|
||||||
failed |= DebugDrawPsLinesDefault.Create(desc);
|
failed |= DebugDrawPsLinesDefault.Create(desc);
|
||||||
desc.PS = shader->GetPS("PS");
|
desc.PS = shader->GetPS("PS", 1);
|
||||||
desc.PrimitiveTopologyType = PrimitiveTopologyType::Triangle;
|
desc.PrimitiveTopologyType = PrimitiveTopologyType::Triangle;
|
||||||
failed |= DebugDrawPsTrianglesDefault.Create(desc);
|
failed |= DebugDrawPsTrianglesDefault.Create(desc);
|
||||||
desc.Wireframe = true;
|
desc.Wireframe = true;
|
||||||
@@ -643,10 +643,10 @@ void DebugDrawService::Update()
|
|||||||
|
|
||||||
// Depth Test
|
// Depth Test
|
||||||
desc.Wireframe = false;
|
desc.Wireframe = false;
|
||||||
desc.PS = shader->GetPS("PS_DepthTestUnlit");
|
desc.PS = shader->GetPS("PS", 2);
|
||||||
desc.PrimitiveTopologyType = PrimitiveTopologyType::Line;
|
desc.PrimitiveTopologyType = PrimitiveTopologyType::Line;
|
||||||
failed |= DebugDrawPsLinesDepthTest.Create(desc);
|
failed |= DebugDrawPsLinesDepthTest.Create(desc);
|
||||||
desc.PS = shader->GetPS("PS_DepthTest");
|
desc.PS = shader->GetPS("PS", 3);
|
||||||
desc.PrimitiveTopologyType = PrimitiveTopologyType::Triangle;
|
desc.PrimitiveTopologyType = PrimitiveTopologyType::Triangle;
|
||||||
failed |= DebugDrawPsTrianglesDepthTest.Create(desc);
|
failed |= DebugDrawPsTrianglesDepthTest.Create(desc);
|
||||||
desc.Wireframe = true;
|
desc.Wireframe = true;
|
||||||
|
|||||||
@@ -27,49 +27,31 @@ VS2PS VS(float3 Position : POSITION, float4 Color : COLOR)
|
|||||||
return output;
|
return output;
|
||||||
}
|
}
|
||||||
|
|
||||||
void PerformDepthTest(float4 svPosition)
|
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
|
// Depth test manually if compositing editor primitives
|
||||||
FLATTEN
|
FLATTEN
|
||||||
if (EnableDepthTest)
|
if (EnableDepthTest)
|
||||||
{
|
{
|
||||||
float sceneDepthDeviceZ = SceneDepthTexture.Load(int3(svPosition.xy, 0)).r;
|
float sceneDepthDeviceZ = SceneDepthTexture.Load(int3(input.Position.xy, 0)).r;
|
||||||
float interpolatedDeviceZ = svPosition.z;
|
float interpolatedDeviceZ = input.Position.z;
|
||||||
clip(sceneDepthDeviceZ - interpolatedDeviceZ);
|
clip(sceneDepthDeviceZ - interpolatedDeviceZ);
|
||||||
}
|
}
|
||||||
}
|
#endif
|
||||||
|
|
||||||
float4 PerformFakeLighting(float4 svPosition, float4 c)
|
float4 color = input.Color;
|
||||||
{
|
#if USE_FAKE_LIGHTING
|
||||||
// Reconstruct view normal and calculate faked lighting
|
// Reconstruct view normal and calculate faked lighting
|
||||||
float depth = svPosition.z * 10000;
|
float depth = input.Position.z * 10000;
|
||||||
float3 n = normalize(float3(-ddx(depth), -ddy(depth), 1.0f));
|
float3 n = normalize(float3(-ddx(depth), -ddy(depth), 1.0f));
|
||||||
c.rgb *= saturate(abs(dot(n, float3(0, 1, 0))) + 0.5f);
|
color.rgb *= saturate(abs(dot(n, float3(0, 1, 0))) + 0.5f);
|
||||||
return c;
|
#endif
|
||||||
}
|
|
||||||
|
|
||||||
META_PS(true, FEATURE_LEVEL_ES2)
|
return color;
|
||||||
float4 PS(VS2PS input) : SV_Target
|
|
||||||
{
|
|
||||||
return PerformFakeLighting(input.Position, input.Color);
|
|
||||||
}
|
|
||||||
|
|
||||||
META_PS(true, FEATURE_LEVEL_ES2)
|
|
||||||
float4 PSUnlit(VS2PS input) : SV_Target
|
|
||||||
{
|
|
||||||
return input.Color;
|
|
||||||
}
|
|
||||||
|
|
||||||
META_PS(true, FEATURE_LEVEL_ES2)
|
|
||||||
float4 PS_DepthTest(VS2PS input) : SV_Target
|
|
||||||
{
|
|
||||||
PerformDepthTest(input.Position);
|
|
||||||
return PerformFakeLighting(input.Position, input.Color);
|
|
||||||
}
|
|
||||||
|
|
||||||
META_PS(true, FEATURE_LEVEL_ES2)
|
|
||||||
float4 PS_DepthTestUnlit(VS2PS input) : SV_Target
|
|
||||||
{
|
|
||||||
PerformDepthTest(input.Position);
|
|
||||||
return input.Color;
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user