87 lines
2.3 KiB
GLSL
87 lines
2.3 KiB
GLSL
#[compute]
|
|
#version 450
|
|
|
|
#define FLT_MAX 3.402823466e+38
|
|
#define FLT_MIN 1.175494351e-38
|
|
#define DBL_MAX 1.7976931348623158e+308
|
|
#define DBL_MIN 2.2250738585072014e-308
|
|
|
|
layout(rgba16f, set = 0, binding = 0) uniform image2D past_color_image;
|
|
layout(rgba16f, set = 0, binding = 1) uniform image2D output_color_image;
|
|
layout(set = 0, binding = 2) uniform sampler2D color_sampler;
|
|
|
|
layout(push_constant, std430) uniform Params
|
|
{
|
|
float nan_fl_1;
|
|
float nan_fl_2;
|
|
float nan_fl_3;
|
|
float nan_fl_4;
|
|
int freeze;
|
|
int draw_debug;
|
|
int debug_page;
|
|
int nan3;
|
|
} params;
|
|
|
|
layout(local_size_x = 16, local_size_y = 16, local_size_z = 1) in;
|
|
|
|
|
|
void main()
|
|
{
|
|
ivec2 render_size = ivec2(textureSize(color_sampler, 0));
|
|
ivec2 uvi = ivec2(gl_GlobalInvocationID.xy);
|
|
if ((uvi.x >= render_size.x) || (uvi.y >= render_size.y))
|
|
{
|
|
return;
|
|
}
|
|
// show past image for freeze frame
|
|
if(params.freeze > 0)
|
|
{
|
|
imageStore(output_color_image, uvi, imageLoad(past_color_image, uvi));
|
|
return;
|
|
}
|
|
// must be on pixel center for whole values (tested)
|
|
vec2 uvn = vec2(uvi + vec2(0.5)) / render_size;
|
|
|
|
vec4 source = textureLod(color_sampler, uvn, 0.0);
|
|
|
|
if (params.draw_debug == 0)
|
|
{
|
|
imageStore(output_color_image, uvi, source);
|
|
imageStore(past_color_image, uvi, source);
|
|
return;
|
|
}
|
|
|
|
vec4 tl_col;
|
|
|
|
vec4 tr_col;
|
|
|
|
vec4 bl_col;
|
|
|
|
vec4 br_col;
|
|
|
|
#ifdef DEBUG
|
|
if(params.debug_page == 0)
|
|
{
|
|
tl_col = imageLoad(debug_1_image, uvi);
|
|
tr_col = imageLoad(debug_2_image, uvi);
|
|
bl_col = imageLoad(debug_3_image, uvi);
|
|
br_col = imageLoad(debug_4_image, uvi);
|
|
}
|
|
if(params.debug_page == 1)
|
|
{
|
|
tl_col = imageLoad(debug_5_image, uvi);
|
|
tr_col = imageLoad(debug_6_image, uvi);
|
|
bl_col = imageLoad(debug_7_image, uvi);
|
|
br_col = imageLoad(debug_8_image, uvi);
|
|
}
|
|
#endif
|
|
|
|
imageStore(output_color_image, uvi / 2, tl_col);
|
|
imageStore(output_color_image, uvi / 2 + ivec2(vec2(0.5, 0.5) * render_size), br_col);
|
|
imageStore(output_color_image, uvi / 2 + ivec2(vec2(0.0, 0.5) * render_size), bl_col);
|
|
imageStore(output_color_image, uvi / 2 + ivec2(vec2(0.5, 0.0) * render_size), tr_col);
|
|
imageStore(past_color_image, uvi / 2, tl_col);
|
|
imageStore(past_color_image, uvi / 2 + ivec2(vec2(0.5, 0.5) * render_size), br_col);
|
|
imageStore(past_color_image, uvi / 2 + ivec2(vec2(0.0, 0.5) * render_size), bl_col);
|
|
imageStore(past_color_image, uvi / 2 + ivec2(vec2(0.5, 0.0) * render_size), tr_col);
|
|
} |