mirror of
https://github.com/Ttanasart-pt/Pixel-Composer.git
synced 2025-01-31 23:35:12 +01:00
50 lines
1.4 KiB
Forth
50 lines
1.4 KiB
Forth
|
cbuffer Base : register(b4) {
|
||
|
float2 uResolution;
|
||
|
};
|
||
|
|
||
|
cbuffer Data : register(b10) {
|
||
|
float uRadius;
|
||
|
int uSamples;
|
||
|
};
|
||
|
|
||
|
Texture2D gm_BaseTextureObject : register(t0);
|
||
|
SamplerState gm_BaseTexture : register(s0);
|
||
|
|
||
|
struct VertexShaderOutput {
|
||
|
float4 pos : SV_POSITION;
|
||
|
float2 uv : TEXCOORD0;
|
||
|
};
|
||
|
|
||
|
struct PixelShaderOutput {
|
||
|
float4 color : SV_TARGET0;
|
||
|
};
|
||
|
|
||
|
float3 getBloom(float2 coord) {
|
||
|
float3 color = float3(0.0, 0.0, 0.0);
|
||
|
int weight = 0;
|
||
|
float2 tx = float2(1.0, 1.0) / uResolution;
|
||
|
float2 scale = tx * uRadius / float(uSamples);
|
||
|
|
||
|
for (int i = 0; i < uSamples; i++) {
|
||
|
float2 coord0 = coord + (float2( i, i) * scale);
|
||
|
float2 coord1 = coord + (float2(-i, -i) * scale);
|
||
|
float2 coord2 = coord + (float2(-i, i) * scale);
|
||
|
float2 coord3 = coord + (float2( i, -i) * scale);
|
||
|
|
||
|
color += gm_BaseTextureObject.Sample(gm_BaseTexture, coord0);
|
||
|
color += gm_BaseTextureObject.Sample(gm_BaseTexture, coord1);
|
||
|
color += gm_BaseTextureObject.Sample(gm_BaseTexture, coord2);
|
||
|
color += gm_BaseTextureObject.Sample(gm_BaseTexture, coord3);
|
||
|
|
||
|
weight++;
|
||
|
}
|
||
|
|
||
|
color /= float(weight) * 4.;
|
||
|
return color;
|
||
|
}
|
||
|
|
||
|
void main(in VertexShaderOutput _input, out PixelShaderOutput output) {
|
||
|
VertexShaderOutput input = _input;
|
||
|
|
||
|
output.color = float4(getBloom(input.uv), 1.0);
|
||
|
}
|