-
Notifications
You must be signed in to change notification settings - Fork 3
/
TonemappingPass.hlsl
55 lines (41 loc) · 1.03 KB
/
TonemappingPass.hlsl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
struct VSInput
{
float3 position : POSITION;
float2 uv : TEXCOORD;
};
struct PSInput
{
float2 uv : TEXCOORD;
float4 position : SV_POSITION;
};
PSInput VSMain(VSInput input)
{
PSInput result;
result.position = float4(input.position.xyz, 1);
result.uv = input.uv;
return result;
}
cbuffer ZoomConstantBuffer : register(b0)
{
float4 RTSize;
float4 ZoomConfig;
}
Texture2D<float4> mainBuffer : register(t0);
float4 PSMain(PSInput input) : SV_Target
{
float4 output = 0;
float3 result = mainBuffer[input.position.xy].rgb;
float zoomFactor = int(ZoomConfig.y);
float2 zoomWindowSize = 0.5 * RTSize.xy;
if (ZoomConfig.x > 0 && all( input.position.xy > zoomWindowSize) )
{
float2 zoomPos = input.position.xy - 0.75 * RTSize.xy;
zoomPos /= zoomFactor;
zoomPos += 0.5 * RTSize.xy ;
result = mainBuffer[zoomPos].rgb;
if (ZoomConfig.z > 0 && ( int(input.position.x) % int(zoomFactor) == 0 || int(input.position.y) % int(zoomFactor) == 0 ))
result = float3(1, 0, 0);
}
output.rgb = pow ( abs(result), 1/2.2);
return output;
}