switch geom-deluxe to use generated subpixel masks instead of LUTs

This commit is contained in:
hunterk 2020-01-25 13:24:52 -06:00
parent 02c53d6605
commit b38342095a
3 changed files with 22 additions and 31 deletions

View file

@ -17,13 +17,14 @@ alias3 = blur
shader4 = shaders/geom-deluxe/crt-geom-deluxe.slang
filter_linear4 = true
textures = "aperture;slot;delta"
delta = shaders/geom-deluxe/masks/delta_2_4x1_rgb.png
delta_filter_linear = true
delta_repeat_mode = repeat
slot = shaders/geom-deluxe/masks/slot_2_5x4_bgr.png
slot_filter_linear = true
slot_repeat_mode = repeat
aperture = shaders/geom-deluxe/masks/aperture_2_4_rgb.png
aperture_filter_linear = true
aperture_repeat_mode = repeat
# comment these mask textures since we're generating them in the shader
#textures = "aperture;slot;delta"
#delta = shaders/geom-deluxe/masks/delta_2_4x1_rgb.png
#delta_filter_linear = true
#delta_repeat_mode = repeat
#slot = shaders/geom-deluxe/masks/slot_2_5x4_bgr.png
#slot_filter_linear = true
#slot_repeat_mode = repeat
#aperture = shaders/geom-deluxe/masks/aperture_2_4_rgb.png
#aperture_filter_linear = true
#aperture_repeat_mode = repeat

View file

@ -12,6 +12,8 @@
#include "geom-deluxe-params.inc"
#include "../../../include/subpixel_masks.h"
#define u_tex_size0 global.SourceSize
#define u_tex_size1 global.internal1Size
#define u_quad_dims global.OutputSize
@ -117,9 +119,10 @@ layout(location = 4) in vec2 v_one;
layout(location = 0) out vec4 FragColor;
layout(set = 0, binding = 2) uniform sampler2D blur;
layout(set = 0, binding = 3) uniform sampler2D internal1;
layout(set = 0, binding = 4) uniform sampler2D aperture;
layout(set = 0, binding = 5) uniform sampler2D slot;
layout(set = 0, binding = 6) uniform sampler2D delta;
// comment these out, as we're using generated masks instead of LUTs
//layout(set = 0, binding = 4) uniform sampler2D aperture;
//layout(set = 0, binding = 5) uniform sampler2D slot;
//layout(set = 0, binding = 6) uniform sampler2D delta;
#define blur_texture blur
@ -301,23 +304,10 @@ void main()
// original code; just makes a giant phosphor here
// xy = v_texCoord.xy * u_quad_dims.xy / u_tex_size1.xy;
// tiling; looks nasty at non-integer x and/or y
// xy = fract(v_texCoord * global.SourceSize.xy * 1.9999);
// gl_FragCoord; tied to physical pixel size
xy = v_texCoord.xy * global.OutputSize.xy;
//vec3 mask = texture(mask_texture, xy).rgb;
vec3 mask = vec3(1.0);
if(mask_picker == 0) // no mask
{
FragColor = vec4(mul_res, col.a);
return;
}
else if(mask_picker == 1) mask = texture(aperture, xy * 0.3333).rgb;
else if(mask_picker == 2) mask = texture(slot, xy * 0.25).rgb;
else mask = texture(delta, xy * 0.49999).rgb;
mask = mix(vec3(1.0), mask, aperture_strength.x);
vec3 mask = mask_weights(xy, aperture_strength.x, mask_picker);
FragColor = vec4(mul_res*mask, col.a);
}
}

View file

@ -16,7 +16,7 @@ layout(std140, set = 0, binding = 0) uniform UBO
mat4 MVP;
} global;
#pragma parameter mask_type "Mask (none, aperture, slot, delta)" 1.0 0.0 3.0 1.0
#pragma parameter mask_type "Mask (aperture, delta, slot)" 1.0 1.0 19.0 1.0
#pragma parameter aperture_strength "Shadow mask strength" 0.4 0.0 1.0 0.05
#pragma parameter phosphor_power "Phosphor decay power" 1.2 0.5 3.0 0.05
#pragma parameter phosphor_amplitude "Phosphor persistence amplitude" 0.04 0.0 0.2 0.01
@ -52,4 +52,4 @@ vec2 angle = vec2(params.angle_x, params.angle_y);
vec2 overscan = vec2(params.overscan_x, params.overscan_y);
int mask_picker = int(params.mask_type);
const float gamma = 2.2;
const float gamma = 2.2;