Merge pull request #492 from kokoko3k/master

Pick some hotfixes till 4717d92
This commit is contained in:
hizzlekizzle 2023-10-06 10:07:43 -05:00 committed by GitHub
commit 1bdb5e0b7f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 72 additions and 37 deletions

View file

@ -202,7 +202,7 @@ IN_GLOW_SPREAD = "1.500000"
IN_GLOW_W = "2.000000" IN_GLOW_W = "2.000000"
IN_GLOW_H = "7.000000" IN_GLOW_H = "7.000000"
DO_PIXELGRID = "1.000000" DO_PIXELGRID = "1.000000"
PIXELGRID_MIN_W = "0.300000" PIXELGRID_MIN_W = "0.400000"
PIXELGRID_MAX_W = "1.000000" PIXELGRID_MAX_W = "1.000000"
PIXELGRID_GAMMA_W = "5.200000" PIXELGRID_GAMMA_W = "5.200000"
PIXELGRID_MUL_X = "1.375000" PIXELGRID_MUL_X = "1.375000"

View file

@ -201,7 +201,7 @@ PIXELGRID_H_COUNT = "4.000000"
PIXELGRID_R_SHIFT = "1.000000" PIXELGRID_R_SHIFT = "1.000000"
PIXELGRID_G_SHIFT = "2.000000" PIXELGRID_G_SHIFT = "2.000000"
PIXELGRID_B_SHIFT = "3.000000" PIXELGRID_B_SHIFT = "3.000000"
PIXELGRID_MIN_W = "0.150000" PIXELGRID_MIN_W = "0.250000"
PIXELGRID_MAX_W = "0.800000" PIXELGRID_MAX_W = "0.800000"
DO_PIXELGRID_H = "0.000000" DO_PIXELGRID_H = "0.000000"
PIXELGRID_Y_MASK = "1.000000" PIXELGRID_Y_MASK = "1.000000"

View file

@ -21,7 +21,7 @@ layout(location = 3) out float vLed_step;
layout(location = 4) out float lod; layout(location = 4) out float lod;
layout(location = 5) out vec2 pre_pass_coords; layout(location = 5) out vec2 pre_pass_coords;
layout(location = 6) out float vIs_rotated; layout(location = 6) out float vIs_rotated;
layout(location = 7) out float vAMBI_STRETCH;
layout(location = 8) out float vAMBI_POWER; layout(location = 8) out float vAMBI_POWER;
layout(location = 9) out float vSmpBorder_min; layout(location = 9) out float vSmpBorder_min;
layout(location = 10) out float vSmpBorder_max; layout(location = 10) out float vSmpBorder_max;
@ -36,10 +36,16 @@ void main() {
vSmpBorder_max = 1.0-smp_internalness; vSmpBorder_max = 1.0-smp_internalness;
bool isrotated = is_rotated();
vIs_rotated = float(isrotated);
if (isrotated)
vAMBI_STRETCH = AMBI_STRETCH_VERTICAL;
else
vAMBI_STRETCH = AMBI_STRETCH;
//Move virtual leds position inside to compensate for widen effect //Move virtual leds position inside to compensate for widen effect
float led_internalness = AMBI_INT_OFFSET + (AMBI_STRETCH *0.025); float led_internalness = AMBI_INT_OFFSET + (vAMBI_STRETCH *0.025);
//less internalness when using bezel: //less internalness when using bezel:
@ -61,8 +67,6 @@ void main() {
//Scale to the original aspect //Scale to the original aspect
float in_aspect = get_in_aspect(); float in_aspect = get_in_aspect();
bool isrotated = is_rotated();
vIs_rotated = float(isrotated);
if ( need_NO_integer_scale() ) if ( need_NO_integer_scale() )
pre_pass_coords = get_scaled_coords_aspect(TexCoord,global.FinalViewportSize, in_aspect, isrotated) + vec2(0.00001); pre_pass_coords = get_scaled_coords_aspect(TexCoord,global.FinalViewportSize, in_aspect, isrotated) + vec2(0.00001);
@ -94,7 +98,7 @@ layout(location = 3) in float vLed_step;
layout(location = 4) in float lod; layout(location = 4) in float lod;
layout(location = 5) in vec2 pre_pass_coords; layout(location = 5) in vec2 pre_pass_coords;
layout(location = 6) in float vIs_rotated; layout(location = 6) in float vIs_rotated;
layout(location = 7) in float vAMBI_STRETCH;
layout(location = 8) in float vAMBI_POWER; layout(location = 8) in float vAMBI_POWER;
layout(location = 9) in float vSmpBorder_min; layout(location = 9) in float vSmpBorder_min;
layout(location = 10) in float vSmpBorder_max; layout(location = 10) in float vSmpBorder_max;
@ -141,8 +145,8 @@ vec3 ambi_pre_pass(vec2 coords) {
//Stretch the lights? //Stretch the lights?
float z1=distance(vec2(0.5,0.5), coords); float z1=distance(vec2(0.5,0.5), coords);
vec2 zoomed_coords = zoomxy(coords, vec2(1+z1)); vec2 zoomed_coords = zoomxy(coords, vec2(1+z1));
coords = mix(coords, zoomed_coords, AMBI_STRETCH*0.5); coords = mix(coords, zoomed_coords, vAMBI_STRETCH*0.5);
float lAMBI_FALLOFF = AMBI_FALLOFF + (z1 * AMBI_STRETCH*0.5); float lAMBI_FALLOFF = AMBI_FALLOFF + (z1 * vAMBI_STRETCH*0.5);
//Finally, emulate leds. //Finally, emulate leds.
vec3 pixel_out = vec3(0.0); vec3 pixel_out = vec3(0.0);
@ -196,7 +200,7 @@ vec3 ambi_pre_pass(vec2 coords) {
smp_point.x += vSmp_step; smp_point.x += vSmp_step;
} }
//pixel_out = pow(pixel_out, 1/vec3(AMBI_GAMMA)); //pixel_out = pow(pixel_out, 1/vec3(AMBI_GAMMA));
return pow(pixel_out, 1/vec3(1+AMBI_STRETCH)); return pow(pixel_out, 1/vec3(1+vAMBI_STRETCH));
} }

View file

@ -13,11 +13,23 @@ layout(location = 0) out vec2 vTexCoord;
layout(location = 1) out vec2 vFuzzy_main_pass_stage_1; layout(location = 1) out vec2 vFuzzy_main_pass_stage_1;
layout(location = 2) out vec3 vTemperature_rgb; layout(location = 2) out vec3 vTemperature_rgb;
layout(location = 3) out vec3 vTemperature_rgb_gamma_in; layout(location = 3) out vec3 vTemperature_rgb_gamma_in;
layout(location = 4) out float vIn_aspect;
layout(location = 5) out vec2 vCo_avglum;
void main() { void main() {
gl_Position = global.MVP * Position; gl_Position = global.MVP * Position;
vTexCoord = TexCoord; vTexCoord = TexCoord;
vIn_aspect = get_in_aspect();
//Since avglum pass moves itself to follow content_geom_override() because it is needed by
//specularity code in final pass, we have to revert that here, or strength on white zones
//will break when using content geometry override.
vCo_avglum = vTexCoord;
if (DO_GAME_GEOM_OVERRIDE == 1.0)
vCo_avglum = content_geom_override(vTexCoord, 1/GAME_GEOM_ASPECT, vIn_aspect, -GAME_GEOM_VSHIFT, -GAME_GEOM_HSHIFT, 1/GAME_GEOM_ZOOM);
//Get fuzzy mul and pow factor //Get fuzzy mul and pow factor
vFuzzy_main_pass_stage_1 = apply_fuzzy_main_pass_stage_1(); vFuzzy_main_pass_stage_1 = apply_fuzzy_main_pass_stage_1();
@ -50,6 +62,8 @@ layout(location = 0) in vec2 vTexCoord;
layout(location = 1) in vec2 vFuzzy_main_pass_stage_1; layout(location = 1) in vec2 vFuzzy_main_pass_stage_1;
layout(location = 2) in vec3 vTemperature_rgb; layout(location = 2) in vec3 vTemperature_rgb;
layout(location = 3) in vec3 vTemperature_rgb_gamma_in; layout(location = 3) in vec3 vTemperature_rgb_gamma_in;
layout(location = 4) in float vIn_aspect;
layout(location = 5) in vec2 vCo_avglum;
layout(location = 0) out vec4 FragColor; layout(location = 0) out vec4 FragColor;
@ -131,8 +145,11 @@ void main() {
if (BLOOM_OVER_WHITE < 1.0) { if (BLOOM_OVER_WHITE < 1.0) {
//Apply other content coords modifiers
//Use mipmap available in avglum_pass to identify bright areas. //Use mipmap available in avglum_pass to identify bright areas.
vec3 avglum = texture(avglum_pass,vTexCoord).rgb; vec3 avglum = texture(avglum_pass,vCo_avglum).rgb;
float b_brightness = max(avglum.b,max(avglum.r,avglum.g)); float b_brightness = max(avglum.b,max(avglum.r,avglum.g));
b_brightness *= 1-BLOOM_OVER_WHITE; b_brightness *= 1-BLOOM_OVER_WHITE;
over_white_correction =1- b_brightness; over_white_correction =1- b_brightness;

View file

@ -19,8 +19,8 @@
//#define DEBUG //#define DEBUG
//#define DEBUG_COLOR_CALIB //#define DEBUG_COLOR_CALIB
#define DEBUG_TIME_FADE //#define DEBUG_TIME_FADE
//#define DEBUG_SOLID_COLOR #define DEBUG_SOLID_COLOR
//#define DEBUG_STEP_GRADIENT //#define DEBUG_STEP_GRADIENT
//#define DEBUG_STEP_GRADIENT_V //#define DEBUG_STEP_GRADIENT_V
//#define DEBUG_BLINK //#define DEBUG_BLINK

View file

@ -138,7 +138,6 @@
#define DO_CURVATURE global.DO_CURVATURE #define DO_CURVATURE global.DO_CURVATURE
#define GEOM_WARP_X global.GEOM_WARP_X #define GEOM_WARP_X global.GEOM_WARP_X
#define GEOM_WARP_Y global.GEOM_WARP_Y #define GEOM_WARP_Y global.GEOM_WARP_Y
#define GEOM_CUT_EARS global.GEOM_CUT_EARS
#define GEOM_CORNER_SIZE global.GEOM_CORNER_SIZE #define GEOM_CORNER_SIZE global.GEOM_CORNER_SIZE
#define GEOM_CORNER_SMOOTH global.GEOM_CORNER_SMOOTH #define GEOM_CORNER_SMOOTH global.GEOM_CORNER_SMOOTH
@ -194,6 +193,7 @@
#define AMBI_POWER global.AMBI_POWER #define AMBI_POWER global.AMBI_POWER
#define AMBI_GAMMA global.AMBI_GAMMA #define AMBI_GAMMA global.AMBI_GAMMA
#define AMBI_STRETCH params.AMBI_STRETCH #define AMBI_STRETCH params.AMBI_STRETCH
#define AMBI_STRETCH_VERTICAL params.AMBI_STRETCH_VERTICAL
#define AMBI_OVER_BEZEL global.AMBI_OVER_BEZEL #define AMBI_OVER_BEZEL global.AMBI_OVER_BEZEL
#define AMBI_OVER_BEZEL_SIZE global.AMBI_OVER_BEZEL_SIZE #define AMBI_OVER_BEZEL_SIZE global.AMBI_OVER_BEZEL_SIZE
#define AMBI_BG_IMAGE_BLEND_MODE global.AMBI_BG_IMAGE_BLEND_MODE #define AMBI_BG_IMAGE_BLEND_MODE global.AMBI_BG_IMAGE_BLEND_MODE
@ -298,9 +298,10 @@
#define PIXELGRID_INTR_FLICK_POWR global.PIXELGRID_INTR_FLICK_POWR #define PIXELGRID_INTR_FLICK_POWR global.PIXELGRID_INTR_FLICK_POWR
#define PIXELGRID_INTR_DISABLE_Y global.PIXELGRID_INTR_DISABLE_Y #define PIXELGRID_INTR_DISABLE_Y global.PIXELGRID_INTR_DISABLE_Y
#define PIXELGRID_GAMMA_W global.PIXELGRID_GAMMA_W #define PIXELGRID_GAMMA_W global.PIXELGRID_GAMMA_W
//#define MOIRE_SWEET_SPOT global.MOIRE_SWEET_SPOT
#define DELTA_RENDER_FORCE_REFRESH global.DELTA_RENDER_FORCE_REFRESH #define DELTA_RENDER_FORCE_REFRESH global.DELTA_RENDER_FORCE_REFRESH
#define DELTA_RENDER_CHECK_AREA global.DELTA_RENDER_CHECK_AREA #define DELTA_RENDER_CHECK_AREA global.DELTA_RENDER_CHECK_AREA

View file

@ -163,6 +163,7 @@ layout(push_constant) uniform Push {
float BLOOM_QUALITY ; //1 float BLOOM_QUALITY ; //1
float AMBI_ADD_ON_BLACK; float AMBI_ADD_ON_BLACK;
float AMBI_STRETCH; float AMBI_STRETCH;
float AMBI_STRETCH_VERTICAL;
float AMBI_INT_OFFSET ; float AMBI_INT_OFFSET ;
} params; } params;
@ -230,7 +231,6 @@ layout(std140, set = 0, binding = 0) uniform UBO {
float DO_CURVATURE; float DO_CURVATURE;
float GEOM_WARP_X; float GEOM_WARP_X;
float GEOM_WARP_Y; float GEOM_WARP_Y;
float GEOM_CUT_EARS;
float GEOM_CORNER_SIZE; float GEOM_CORNER_SIZE;
float GEOM_CORNER_SMOOTH; float GEOM_CORNER_SMOOTH;
@ -382,6 +382,8 @@ layout(std140, set = 0, binding = 0) uniform UBO {
float PIXELGRID_GAMMA_H; float PIXELGRID_GAMMA_H;
float PIXELGRID_GAMMA_W; float PIXELGRID_GAMMA_W;
//float PIXELGRID_HMASK_NO_BRIGHT; //float PIXELGRID_HMASK_NO_BRIGHT;
//float MOIRE_SWEET_SPOT;
float PIXELGRID_BASAL_GRID; float PIXELGRID_BASAL_GRID;
float DELTA_RENDER_FORCE_REFRESH; float DELTA_RENDER_FORCE_REFRESH;
float DELTA_RENDER_CHECK_AREA; float DELTA_RENDER_CHECK_AREA;
@ -484,7 +486,7 @@ layout(std140, set = 0, binding = 0) uniform UBO {
#pragma parameter BLANK7 " " 0.0 0.0 1.0 1.0 #pragma parameter BLANK7 " " 0.0 0.0 1.0 1.0
#pragma parameter TATE "★ Tate mode (0:disabled 1:auto 2:forced)" 0.0 0.0 2.0 1.0 #pragma parameter TATE "★ Tate mode (0:disabled 1:auto 2:forced)" 1.0 0.0 2.0 1.0
#pragma parameter BLANK7a " " 0.0 0.0 1.0 1.0 #pragma parameter BLANK7a " " 0.0 0.0 1.0 1.0
@ -515,12 +517,13 @@ layout(std140, set = 0, binding = 0) uniform UBO {
#pragma parameter PIXELGRID_MIN_H " . Phosphors height Min" 0.2 0.00 1.0 0.05 #pragma parameter PIXELGRID_MIN_H " . Phosphors height Min" 0.2 0.00 1.0 0.05
#pragma parameter PIXELGRID_MAX_H " . Phosphors height Max" 0.6 0.0 1.5 0.05 #pragma parameter PIXELGRID_MAX_H " . Phosphors height Max" 0.6 0.0 1.5 0.05
#pragma parameter PIXELGRID_GAMMA_H " . Phosphors height min->max gamma:" 4.2 1.0 8.00 0.1 #pragma parameter PIXELGRID_GAMMA_H " . Phosphors height min->max gamma:" 4.2 1.0 8.00 0.1
#pragma parameter PIXELGRID_OFFSET_CORE " . Slotmask(-fake) offset (low => anti-moiree)" 0.0 0.0 1.0 0.01
#pragma parameter PIXELGRID_NO_INTERBLEED_H " . Inter line extra steepness" 0.0 0.0 10.0 0.1 #pragma parameter PIXELGRID_NO_INTERBLEED_H " . Inter line extra steepness" 0.0 0.0 10.0 0.1
#pragma parameter PIXELGRID_H_DEDOT " . Dedot mask between scanlines (use only if needed!)" 0.0 0.0 1.0 0.1 //#pragma parameter MOIRE_SWEET_SPOT " . Moire mitigation sweet spot" 0.0 0.0 1.0 0.01
#pragma parameter PIXELGRID_OFFSET_CORE " . Slotmask(-fake) offset" 0.0 0.0 1.0 0.01
#pragma parameter PIXELGRID_DECON_R_H " . Deconvergence Y: R phosphor" 0.0 -1.6 1.6 0.1 #pragma parameter PIXELGRID_DECON_R_H " . Deconvergence Y: R phosphor" 0.0 -1.6 1.6 0.1
#pragma parameter PIXELGRID_DECON_G_H " . Deconvergence Y: G phosphor" 0.0 -1.6 1.6 0.1 #pragma parameter PIXELGRID_DECON_G_H " . Deconvergence Y: G phosphor" 0.0 -1.6 1.6 0.1
#pragma parameter PIXELGRID_DECON_B_H " . Deconvergence Y: B phosphor" 0.0 -1.6 1.6 0.1 #pragma parameter PIXELGRID_DECON_B_H " . Deconvergence Y: B phosphor" 0.0 -1.6 1.6 0.1
#pragma parameter PIXELGRID_H_DEDOT " . Dedot mask between scanlines (use only if needed!)" 0.0 0.0 1.0 0.1
#pragma parameter BLANK12f " " 0.0 0.0 1.0 1.0 #pragma parameter BLANK12f " " 0.0 0.0 1.0 1.0
@ -595,7 +598,6 @@ layout(std140, set = 0, binding = 0) uniform UBO {
#pragma parameter DO_CURVATURE "★ Curvature/Border enable? (cu) ==>" 0.0 0.0 1.0 1.0 #pragma parameter DO_CURVATURE "★ Curvature/Border enable? (cu) ==>" 0.0 0.0 1.0 1.0
#pragma parameter GEOM_WARP_X " Warp X" 0.28 0.0 6.0 0.01 #pragma parameter GEOM_WARP_X " Warp X" 0.28 0.0 6.0 0.01
#pragma parameter GEOM_WARP_Y " Warp Y" 0.32 0.0 6.0 0.01 #pragma parameter GEOM_WARP_Y " Warp Y" 0.32 0.0 6.0 0.01
#pragma parameter GEOM_CUT_EARS " Cut curvature ears" 1.4 1.0 10.0 0.01
#pragma parameter GEOM_CORNER_SIZE " Corner radius" 0.005 0.005 0.1 0.001 #pragma parameter GEOM_CORNER_SIZE " Corner radius" 0.005 0.005 0.1 0.001
#pragma parameter GEOM_CORNER_SMOOTH " Corner sharpness" 350.0 15.0 1000.0 1.0 #pragma parameter GEOM_CORNER_SMOOTH " Corner sharpness" 350.0 15.0 1000.0 1.0
#pragma parameter BLANK14 " " 0.0 0.0 1.0 1.0 #pragma parameter BLANK14 " " 0.0 0.0 1.0 1.0
@ -652,7 +654,8 @@ layout(std140, set = 0, binding = 0) uniform UBO {
#pragma parameter AMBI_FALLOFF " Led power/falloff" 0.4 0.1 3.0 0.01 #pragma parameter AMBI_FALLOFF " Led power/falloff" 0.4 0.1 3.0 0.01
#pragma parameter AMBI_POWER " Led Saturation" 1.8 0.0 100.0 0.05 #pragma parameter AMBI_POWER " Led Saturation" 1.8 0.0 100.0 0.05
#pragma parameter AMBI_INT_OFFSET " Led internalness" 0.07 -1.0 1.0 0.01 #pragma parameter AMBI_INT_OFFSET " Led internalness" 0.07 -1.0 1.0 0.01
#pragma parameter AMBI_STRETCH " Widen lights" 0.0 0.0 1.0 0.01 #pragma parameter AMBI_STRETCH " Widen lights (horizontal games)" 0.0 0.0 1.0 0.01
#pragma parameter AMBI_STRETCH_VERTICAL " Widen lights (vertical games)" 0.5 0.0 1.0 0.01
#pragma parameter AMBI_GAMMA " Output Gamma" 1.3 0.1 8.0 0.1 #pragma parameter AMBI_GAMMA " Output Gamma" 1.3 0.1 8.0 0.1
#pragma parameter AMBI_OVER_BEZEL " Colorize Bezel" 0.2 0.0 5.0 0.05 #pragma parameter AMBI_OVER_BEZEL " Colorize Bezel" 0.2 0.0 5.0 0.05
#pragma parameter AMBI_OVER_BEZEL_SIZE " . Colorization size" 0.15 0.0 0.5 0.001 #pragma parameter AMBI_OVER_BEZEL_SIZE " . Colorization size" 0.15 0.0 0.5 0.001

View file

@ -561,7 +561,15 @@ vec4 fn_pixel_grid(vec2 in_coords, vec3 pixel_in, float min_inLum, float max_inL
float triad_stagger_offset = is_even * pi * (PIXELGRID_OFFSET_CORE); float triad_stagger_offset = is_even * pi * (PIXELGRID_OFFSET_CORE);
//get 3 sines with applied the optional staggered offset for slotmask, and single phosphors staggering for y deconvergence. //get 3 sines with applied the optional staggered offset for slotmask, and single phosphors staggering for y deconvergence.
vec3 decon_stagger = vec3( PIXELGRID_DECON_R_H, PIXELGRID_DECON_G_H, PIXELGRID_DECON_B_H) ; //* (pixel_in/max_inLum) ; vec3 decon_stagger = vec3( PIXELGRID_DECON_R_H, PIXELGRID_DECON_G_H, PIXELGRID_DECON_B_H) ; //* (pixel_in/max_inLum) ;
vec3 rgb_h_sin = sin( (freq_base_core.y * interlacing_adapt_period) + triad_stagger_offset - decon_stagger + vScanlineAlternateOffset );
#ifdef MOIRE_MITIGATION
#define IS_EVEN float(sin(vPG_freq_base_screen_unfloored.x * vPG_offsets_and_size.a) > 0.5)
float moire_mitigation_sweet_spot = IS_EVEN * MOIRE_SWEET_SPOT;
vec3 rgb_h_sin = sin( (freq_base_core.y * interlacing_adapt_period) + triad_stagger_offset - decon_stagger + vScanlineAlternateOffset + moire_mitigation_sweet_spot );
#else
vec3 rgb_h_sin = sin( (freq_base_core.y * interlacing_adapt_period) + triad_stagger_offset - decon_stagger + vScanlineAlternateOffset);
#endif
//make it positve with doubled frequency: //make it positve with doubled frequency:
rgb_h_sin = (rgb_h_sin * rgb_h_sin); rgb_h_sin = (rgb_h_sin * rgb_h_sin);
@ -708,17 +716,13 @@ vec4 fn_pixel_grid(vec2 in_coords, vec3 pixel_in, float min_inLum, float max_inL
//mask = floor(mask*16.0)/16.0; //mask = floor(mask*16.0)/16.0;
//mask = pow(mask, vec3(0.5)); //mask = pow(mask, vec3(0.5));
//Apply Overmask: //Apply Overmask:
mask = PIXELGRID_OVERMASK * (mask - 0.5) + 0.5; mask = PIXELGRID_OVERMASK * (mask - 0.5) + 0.5;
pixel_in = mix(pixel_in, pixel_in * PIXELGRID_OVERMASK, PIXELGRID_OVERMASK); pixel_in = mix(pixel_in, pixel_in * PIXELGRID_OVERMASK, PIXELGRID_OVERMASK);
//Apply the mask to pixel_in and clamp the minimum to the unexcited grille. //Apply the mask to pixel_in and clamp the minimum to the unexcited grille.
vec3 mask_and_grille = max(mask * pixel_in, rgb_grille * PIXELGRID_BASAL_GRID*0.0025); vec3 mask_and_grille = max(mask * pixel_in, rgb_grille * PIXELGRID_BASAL_GRID*0.0025);
//return it with alpha channel containing the mask itself, so that halo can selectively light it. //return it with alpha channel containing the mask itself, so that halo can selectively light it.
return vec4( mask_and_grille , dot(rgb_h, vec3(0.3333))); return vec4( mask_and_grille , dot(rgb_h, vec3(0.3333)));
} }
@ -943,9 +947,15 @@ vec3 light_over_image(vec3 light, vec3 image, float black_illumination) {
//Simulates illumination. //Simulates illumination.
//It works by adding the light on the image. //It works by adding the light on the image.
//It will add less light on dark colors ( //It will add less light on dark colors (
vec3 light_on_black = black_illumination * light;
return image.rgb + ( (light - light_on_black ) * image.rgb ) + light_on_black;
//mitigate clipping by lowering light on bright images:
light = light * (1- (max(image.r,image.g),image.b) ) ;
vec3 light_on_black = black_illumination * light;
vec3 modulated_on_black = image.rgb + ( (light - 0.0 ) * image.rgb ) + light_on_black;
return modulated_on_black;
} }
vec3 ambi_blend_image(vec4 image, vec3 ambi, float blend_mode) { vec3 ambi_blend_image(vec4 image, vec3 ambi, float blend_mode) {
@ -1208,7 +1218,6 @@ void main() {
if (DO_DYNZOOM == 1.0) if (DO_DYNZOOM == 1.0)
co_content = zoom(co_content, get_dyn_zoom(avglum_pass) ); co_content = zoom(co_content, get_dyn_zoom(avglum_pass) );
//Create an alpha mask to write content into, it holds opacity info that will be used to compose: //Create an alpha mask to write content into, it holds opacity info that will be used to compose:
if (DO_CURVATURE == 1.0) { if (DO_CURVATURE == 1.0) {
canvas_busy = fn_border(co_content); canvas_busy = fn_border(co_content);
@ -1243,6 +1252,7 @@ void main() {
//Ambient light //Ambient light
if (DO_AMBILIGHT == 1.0) { if (DO_AMBILIGHT == 1.0) {
pixel_ambi = texture(ambi_temporal_pass, vOutputCoord).rgb; pixel_ambi = texture(ambi_temporal_pass, vOutputCoord).rgb;
if (DO_BG_IMAGE != 1.0)
pixel_ambi += random_fast( (NOISEPOWER * NOISEPOWER_AMBI_MUL) * ((1-pixel_ambi.g) * (pixel_ambi.g*1 - pixel_ambi.r*0.125 -pixel_ambi.b*0.125 ) ) , pixel_ambi += random_fast( (NOISEPOWER * NOISEPOWER_AMBI_MUL) * ((1-pixel_ambi.g) * (pixel_ambi.g*1 - pixel_ambi.r*0.125 -pixel_ambi.b*0.125 ) ) ,
vTexCoord * vDynamicSeed ) ; vTexCoord * vDynamicSeed ) ;

View file

@ -1,3 +1,3 @@
I'm using jpg as a bg image to keep size low. I'm using jpg as a bg image to keep size low.
RA on android has an issue with jpg loading, but fortunately i found a workaround: RA on android has an issue with jpg loading, but fortunately i found a workaround (pushing black levels):
https://github.com/libretro/RetroArch/issues/15337 https://github.com/libretro/RetroArch/issues/15337