2013-12-18 20:28:06 +01:00
|
|
|
#include "Defines.hlsli"
|
|
|
|
#include "LightCalc.hlsli"
|
|
|
|
#include "PosManipulation.hlsli"
|
2014-01-08 07:01:59 +01:00
|
|
|
#include "SSAO.hlsli"
|
2013-12-18 20:28:06 +01:00
|
|
|
//todo
|
|
|
|
//LightCulling
|
2014-01-08 07:01:59 +01:00
|
|
|
//Calc Diff + Spec Done
|
|
|
|
//Calc Ambience Done
|
2013-12-18 20:28:06 +01:00
|
|
|
//Write Glow
|
|
|
|
|
|
|
|
|
|
|
|
[numthreads(16, 16, 1)]
|
2014-01-08 07:01:59 +01:00
|
|
|
void main( uint3 DTid : SV_DispatchThreadID, uint3 GTid : SV_GroupThreadID )
|
2013-12-18 20:28:06 +01:00
|
|
|
{
|
2014-01-28 13:48:15 +01:00
|
|
|
float2 UV = DTid.xy / Pixels;
|
2014-01-08 07:01:59 +01:00
|
|
|
UV.x = UV.x * 2 - 1;
|
|
|
|
UV.y = 1 - 2 * UV.y;
|
|
|
|
float3 ViewPos = ToVpos(DTid.xy, UV);
|
2013-12-18 20:28:06 +01:00
|
|
|
DiffSpec Shaded;
|
2014-01-28 13:48:15 +01:00
|
|
|
Shaded.Diffuse = float3(0,0,0);
|
|
|
|
Shaded.Specular = float3(0,0,0);
|
2014-01-08 07:01:59 +01:00
|
|
|
|
2013-12-18 20:28:06 +01:00
|
|
|
for(int i = 0; i < Lights; ++i)
|
|
|
|
{
|
|
|
|
DiffSpec light = LightCalc(Points[i], ViewPos, DTid.xy);
|
2014-01-08 07:01:59 +01:00
|
|
|
Shaded.Diffuse += light.Diffuse;
|
|
|
|
Shaded.Specular += light.Specular;
|
|
|
|
}
|
|
|
|
|
2014-02-10 09:35:03 +01:00
|
|
|
Diffuse[DTid.xy] = float4(Shaded.Diffuse * DiffuseGlow[DTid.xy].xyz,0);
|
|
|
|
Specular[DTid.xy] = float4(Shaded.Specular, 0);
|
2014-01-08 07:01:59 +01:00
|
|
|
|
|
|
|
|
2014-01-22 16:31:33 +01:00
|
|
|
if(DTid.x & 1 && DTid.y & 1 )
|
2014-01-08 07:01:59 +01:00
|
|
|
{
|
2014-01-22 16:31:33 +01:00
|
|
|
float AmbValue = GetSSAO(ViewPos, UV, DTid.xy, GTid.xy/2);
|
2014-02-17 09:03:53 +01:00
|
|
|
float4 DiffBase = DiffuseGlow[DTid.xy];
|
|
|
|
DiffBase += DiffuseGlow[DTid.xy + uint2(1,0)];
|
|
|
|
DiffBase += DiffuseGlow[DTid.xy + uint2(0,1)];
|
|
|
|
DiffBase += DiffuseGlow[DTid.xy + uint2(1,1)];
|
|
|
|
DiffBase = DiffBase / 4;
|
|
|
|
Ambient[DTid.xy/2] = float4(DiffBase.xyz, AmbValue);
|
2014-02-10 01:03:10 +01:00
|
|
|
Ambient[DTid.xy/2 + float2(Pixels.x/2, 0)] = GUI[DTid.xy];
|
2014-02-17 09:03:53 +01:00
|
|
|
Ambient[DTid.xy/2 + float2(0, Pixels.y/2)] = float4(DiffBase.xyz * DiffBase.w,1);
|
2014-02-14 14:27:38 +01:00
|
|
|
Ambient[DTid.xy/2 + Pixels/2] = float4(NormalSpec[DTid.xy].xyz,1);
|
2013-12-18 20:28:06 +01:00
|
|
|
}
|
2014-01-08 07:01:59 +01:00
|
|
|
|
2013-12-18 20:28:06 +01:00
|
|
|
}
|