35 lines
1010 B
GLSL
35 lines
1010 B
GLSL
#[compute]
|
|
#version 450
|
|
layout(local_size_x = 8, local_size_y = 8, local_size_z = 1) in;
|
|
|
|
layout(rgba16f, set = 0, binding = 0) uniform image2D color_image;
|
|
|
|
layout(push_constant, std430) uniform Params {
|
|
vec2 raster_size;
|
|
float pixel_size;
|
|
float reserved;
|
|
} params;
|
|
|
|
void main()
|
|
{
|
|
ivec2 uv = ivec2(gl_GlobalInvocationID.xy);
|
|
ivec2 size = ivec2(params.raster_size);
|
|
|
|
if (uv.x >= size.x || uv.y >= size.y )
|
|
{
|
|
return;
|
|
}
|
|
|
|
float x = float(int(gl_GlobalInvocationID.x) % int(params.pixel_size));
|
|
float y = float(int(gl_GlobalInvocationID.y) % int(params.pixel_size));
|
|
|
|
x = gl_GlobalInvocationID.x + floor(params.pixel_size / 2.0) - x;
|
|
y = gl_GlobalInvocationID.y + floor(params.pixel_size / 2.0) - y;
|
|
|
|
x = min( x, params.raster_size.x - max( 1.0, params.pixel_size / 2.0 ) );
|
|
y = min( y, params.raster_size.y - max( 1.0, params.pixel_size / 2.0 ) );
|
|
|
|
vec4 color = imageLoad(color_image, ivec2( x, y ) );
|
|
imageStore(color_image, uv, color);
|
|
}
|