Danbias/Code/OysterGraphics/Shader/Passes/Post/PostPass.hlsl

43 lines
1.0 KiB
HLSL
Raw Normal View History

2014-01-08 07:01:59 +01:00
Texture2D Diffuse : register(t0);
Texture2D Specular : register(t1);
Texture2D Ambient : register(t2);
RWTexture2D<float4> Output;
2014-02-13 15:24:19 +01:00
SamplerState S1 : register(s0);
2014-02-07 16:51:35 +01:00
cbuffer Size : register(b0)
{
float AmbFactor;
2014-02-07 16:51:35 +01:00
}
2014-01-08 07:01:59 +01:00
[numthreads(16, 16, 1)]
void main( uint3 DTid : SV_DispatchThreadID )
{
2014-02-19 15:57:52 +01:00
float SSAO = 0;
for(int x = 0; x < 4; ++x)
{
for(int y = 0; y < 4; ++y)
{
SSAO += Ambient[DTid.xy/2 + uint2(-2+x,-2+y)].w;
}
}
SSAO = SSAO / 16;
2014-02-10 09:35:03 +01:00
float4 Light = Diffuse[DTid.xy] + saturate(Specular[DTid.xy]);
2014-02-19 15:57:52 +01:00
float3 Amb = Ambient[DTid.xy/2].xyz * SSAO;
2014-02-19 13:38:36 +01:00
float3 Glow = Ambient[DTid.xy/2 + uint2(0,Output.Length.y/2)].xyz;
2014-02-13 15:24:19 +01:00
2014-02-10 01:03:10 +01:00
float4 GUI;
uint2 index = DTid.xy/2 + uint2((uint)Output.Length.x/(uint)2,0);
2014-02-19 15:57:52 +01:00
float3 PostLight = Amb * AmbFactor;
2014-02-13 15:24:19 +01:00
PostLight = PostLight + Light.xyz + Glow;
2014-02-10 01:03:10 +01:00
GUI = float4(Ambient[index]);
2014-02-10 09:35:03 +01:00
PostLight = PostLight * (1 - GUI.w);
2014-02-10 01:03:10 +01:00
Output[DTid.xy] = float4((GUI.xyz * GUI.w) + PostLight, 1);
2014-02-13 15:24:19 +01:00
2014-02-19 13:38:36 +01:00
//Output[DTid.xy] = float4(Ambient[DTid.xy/2 + uint2(Output.Length*0.5f)].xyz,1);
2014-02-19 15:57:52 +01:00
//Output[DTid.xy] = SSAO * float4(1,1,1,1);
2014-01-08 07:01:59 +01:00
}