diff --git a/data/shaders/postfx.frag b/data/shaders/postfx.frag index e840fb0..2a9788d 100644 --- a/data/shaders/postfx.frag +++ b/data/shaders/postfx.frag @@ -96,18 +96,22 @@ void main() { colour = mix(colour, lin, u.gamma_strength); } - // Scanlines — 1 pixel físico oscuro por fila lógica. - // Usa uv.y (independiente del offset de letterbox) con pixel_scale para - // calcular la posición dentro de la fila en coordenadas físicas. - // 3x: 1 dark + 2 bright. 4x: 1 dark + 3 bright. - // bright=3.5×, dark floor=0.42 (mantiene aspecto CRT original). - // ** MOD ** bright=1.0×, dark floor=0.42 (mantiene aspecto CRT original). + // Scanlines — proporción 2/3 brillantes + 1/3 oscuras por fila lógica. + // Casos especiales: 1 subfila → sin efecto; 2 subfilas → 1+1 (50/50). + // Constantes ajustables: + const float SCAN_DARK_RATIO = 0.333; // fracción de subfilas oscuras (ps >= 3) + const float SCAN_DARK_FLOOR = 0.42; // multiplicador de brillo de subfilas oscuras if (u.scanline_strength > 0.0) { float ps = max(1.0, round(u.pixel_scale)); float frac_in_row = fract(uv.y * u.screen_height); float row_pos = floor(frac_in_row * ps); - float is_dark = step(ps - 1.0, row_pos); - float scan = mix(1.0, 0.42, is_dark); + // bright_rows: cuántas subfilas son brillantes + // ps==1 → ps (todo brillante → is_dark nunca se activa) + // ps==2 → 1 brillante + 1 oscura + // ps>=3 → floor(ps * (1 - DARK_RATIO)) brillantes + float bright_rows = (ps < 2.0) ? ps : ((ps < 3.0) ? 1.0 : floor(ps * (1.0 - SCAN_DARK_RATIO))); + float is_dark = step(bright_rows, row_pos); + float scan = mix(1.0, SCAN_DARK_FLOOR, is_dark); colour *= mix(1.0, scan, u.scanline_strength); } diff --git a/data/shaders/postfx.frag.spv b/data/shaders/postfx.frag.spv new file mode 100644 index 0000000..f3207c1 Binary files /dev/null and b/data/shaders/postfx.frag.spv differ diff --git a/source/core/rendering/sdl3gpu/postfx_frag_spv.h b/source/core/rendering/sdl3gpu/postfx_frag_spv.h index 4a50a60..a60ea13 100644 --- a/source/core/rendering/sdl3gpu/postfx_frag_spv.h +++ b/source/core/rendering/sdl3gpu/postfx_frag_spv.h @@ -14,7 +14,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x0d, 0x00, - 0xde, + 0xf2, 0x01, 0x00, 0x00, @@ -102,7 +102,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xa2, + 0xb6, 0x01, 0x00, 0x00, @@ -1104,12 +1104,32 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x05, 0x00, - 0x04, + 0x05, 0x00, 0x6b, 0x01, 0x00, 0x00, + 0x62, + 0x72, + 0x69, + 0x67, + 0x68, + 0x74, + 0x5f, + 0x72, + 0x6f, + 0x77, + 0x73, + 0x00, + 0x05, + 0x00, + 0x04, + 0x00, + 0x80, + 0x01, + 0x00, + 0x00, 0x69, 0x73, 0x5f, @@ -1122,7 +1142,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x04, 0x00, - 0x70, + 0x84, 0x01, 0x00, 0x00, @@ -1138,7 +1158,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x03, 0x00, - 0x7f, + 0x93, 0x01, 0x00, 0x00, @@ -1150,7 +1170,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x03, 0x00, - 0x8a, + 0x9e, 0x01, 0x00, 0x00, @@ -1162,7 +1182,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x05, 0x00, - 0x8e, + 0xa2, 0x01, 0x00, 0x00, @@ -1182,7 +1202,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x05, 0x00, - 0xa0, + 0xb4, 0x01, 0x00, 0x00, @@ -1202,7 +1222,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x06, 0x00, - 0xa2, + 0xb6, 0x01, 0x00, 0x00, @@ -1226,7 +1246,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x04, 0x00, - 0xa9, + 0xbd, 0x01, 0x00, 0x00, @@ -1242,7 +1262,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x06, 0x00, - 0xc8, + 0xdc, 0x01, 0x00, 0x00, @@ -1614,7 +1634,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x04, 0x00, - 0xa2, + 0xb6, 0x01, 0x00, 0x00, @@ -2750,7 +2770,39 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x71, + 0x74, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0x40, + 0x40, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x7b, + 0x01, + 0x00, + 0x00, + 0x83, + 0xc0, + 0x2a, + 0x3f, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x85, 0x01, 0x00, 0x00, @@ -2766,7 +2818,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x81, + 0x95, 0x01, 0x00, 0x00, @@ -2782,19 +2834,19 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x82, + 0x96, 0x01, 0x00, 0x00, - 0x81, + 0x95, 0x01, 0x00, 0x00, - 0x81, + 0x95, 0x01, 0x00, 0x00, - 0x81, + 0x95, 0x01, 0x00, 0x00, @@ -2806,7 +2858,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x9a, + 0xae, 0x01, 0x00, 0x00, @@ -2818,7 +2870,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x04, 0x00, - 0xa1, + 0xb5, 0x01, 0x00, 0x00, @@ -2834,11 +2886,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x04, 0x00, - 0xa1, + 0xb5, 0x01, 0x00, 0x00, - 0xa2, + 0xb6, 0x01, 0x00, 0x00, @@ -2850,7 +2902,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x04, 0x00, - 0xa3, + 0xb7, 0x01, 0x00, 0x00, @@ -2870,7 +2922,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xa6, + 0xba, 0x01, 0x00, 0x00, @@ -2886,7 +2938,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xaa, + 0xbe, 0x01, 0x00, 0x00, @@ -2902,19 +2954,19 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xab, + 0xbf, 0x01, 0x00, 0x00, - 0xaa, + 0xbe, 0x01, 0x00, 0x00, - 0xaa, + 0xbe, 0x01, 0x00, 0x00, - 0xaa, + 0xbe, 0x01, 0x00, 0x00, @@ -2926,7 +2978,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xb3, + 0xc7, 0x01, 0x00, 0x00, @@ -2942,7 +2994,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xc2, + 0xd6, 0x01, 0x00, 0x00, @@ -2958,7 +3010,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xcb, + 0xdf, 0x01, 0x00, 0x00, @@ -2974,7 +3026,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xd2, + 0xe6, 0x01, 0x00, 0x00, @@ -3434,7 +3486,55 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x70, + 0x6e, + 0x01, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x13, + 0x00, + 0x00, + 0x00, + 0x76, + 0x01, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x13, + 0x00, + 0x00, + 0x00, + 0x80, + 0x01, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x13, + 0x00, + 0x00, + 0x00, + 0x84, 0x01, 0x00, 0x00, @@ -3450,7 +3550,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x7f, + 0x93, 0x01, 0x00, 0x00, @@ -3466,7 +3566,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x8a, + 0x9e, 0x01, 0x00, 0x00, @@ -3482,7 +3582,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x8e, + 0xa2, 0x01, 0x00, 0x00, @@ -3498,7 +3598,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xa0, + 0xb4, 0x01, 0x00, 0x00, @@ -3514,7 +3614,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xa9, + 0xbd, 0x01, 0x00, 0x00, @@ -3530,7 +3630,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xc8, + 0xdc, 0x01, 0x00, 0x00, @@ -7758,11 +7858,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x01, 0x00, 0x00, - 0x83, + 0xb8, 0x00, 0x05, 0x00, - 0x06, + 0x77, 0x00, 0x00, 0x00, @@ -7774,10 +7874,46 @@ static const uint8_t kpostfx_frag_spv[] = { 0x01, 0x00, 0x00, - 0x63, + 0xd4, 0x00, 0x00, 0x00, + 0xf7, + 0x00, + 0x03, + 0x00, + 0x70, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xfa, + 0x00, + 0x04, + 0x00, + 0x6d, + 0x01, + 0x00, + 0x00, + 0x6f, + 0x01, + 0x00, + 0x00, + 0x72, + 0x01, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x6f, + 0x01, + 0x00, + 0x00, 0x3d, 0x00, 0x04, @@ -7786,10 +7922,330 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, + 0x71, + 0x01, + 0x00, + 0x00, + 0x58, + 0x01, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, 0x6e, 0x01, 0x00, 0x00, + 0x71, + 0x01, + 0x00, + 0x00, + 0xf9, + 0x00, + 0x02, + 0x00, + 0x70, + 0x01, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x72, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x73, + 0x01, + 0x00, + 0x00, + 0x58, + 0x01, + 0x00, + 0x00, + 0xb8, + 0x00, + 0x05, + 0x00, + 0x77, + 0x00, + 0x00, + 0x00, + 0x75, + 0x01, + 0x00, + 0x00, + 0x73, + 0x01, + 0x00, + 0x00, + 0x74, + 0x01, + 0x00, + 0x00, + 0xf7, + 0x00, + 0x03, + 0x00, + 0x78, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xfa, + 0x00, + 0x04, + 0x00, + 0x75, + 0x01, + 0x00, + 0x00, + 0x77, + 0x01, + 0x00, + 0x00, + 0x79, + 0x01, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x77, + 0x01, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x76, + 0x01, + 0x00, + 0x00, + 0x63, + 0x00, + 0x00, + 0x00, + 0xf9, + 0x00, + 0x02, + 0x00, + 0x78, + 0x01, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x79, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x7a, + 0x01, + 0x00, + 0x00, + 0x58, + 0x01, + 0x00, + 0x00, + 0x85, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x7c, + 0x01, + 0x00, + 0x00, + 0x7a, + 0x01, + 0x00, + 0x00, + 0x7b, + 0x01, + 0x00, + 0x00, + 0x0c, + 0x00, + 0x06, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x7d, + 0x01, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x08, + 0x00, + 0x00, + 0x00, + 0x7c, + 0x01, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x76, + 0x01, + 0x00, + 0x00, + 0x7d, + 0x01, + 0x00, + 0x00, + 0xf9, + 0x00, + 0x02, + 0x00, + 0x78, + 0x01, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x78, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x7e, + 0x01, + 0x00, + 0x00, + 0x76, + 0x01, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x6e, + 0x01, + 0x00, + 0x00, + 0x7e, + 0x01, + 0x00, + 0x00, + 0xf9, + 0x00, + 0x02, + 0x00, + 0x70, + 0x01, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x70, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x7f, + 0x01, + 0x00, + 0x00, + 0x6e, + 0x01, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x6b, + 0x01, + 0x00, + 0x00, + 0x7f, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x81, + 0x01, + 0x00, + 0x00, + 0x6b, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x82, + 0x01, + 0x00, + 0x00, 0x66, 0x01, 0x00, @@ -7802,7 +8258,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x6f, + 0x83, 0x01, 0x00, 0x00, @@ -7814,11 +8270,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x6d, + 0x81, 0x01, 0x00, 0x00, - 0x6e, + 0x82, 0x01, 0x00, 0x00, @@ -7826,11 +8282,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x03, 0x00, - 0x6b, + 0x80, 0x01, 0x00, 0x00, - 0x6f, + 0x83, 0x01, 0x00, 0x00, @@ -7842,11 +8298,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x72, + 0x86, 0x01, 0x00, 0x00, - 0x6b, + 0x80, 0x01, 0x00, 0x00, @@ -7858,7 +8314,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x73, + 0x87, 0x01, 0x00, 0x00, @@ -7874,11 +8330,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x71, + 0x85, 0x01, 0x00, 0x00, - 0x72, + 0x86, 0x01, 0x00, 0x00, @@ -7886,11 +8342,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x03, 0x00, - 0x70, + 0x84, 0x01, 0x00, 0x00, - 0x73, + 0x87, 0x01, 0x00, 0x00, @@ -7902,11 +8358,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x74, + 0x88, 0x01, 0x00, 0x00, - 0x70, + 0x84, 0x01, 0x00, 0x00, @@ -7918,7 +8374,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x75, + 0x89, 0x01, 0x00, 0x00, @@ -7938,11 +8394,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x76, + 0x8a, 0x01, 0x00, 0x00, - 0x75, + 0x89, 0x01, 0x00, 0x00, @@ -7954,7 +8410,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x77, + 0x8b, 0x01, 0x00, 0x00, @@ -7970,11 +8426,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x74, + 0x88, 0x01, 0x00, 0x00, - 0x76, + 0x8a, 0x01, 0x00, 0x00, @@ -7986,7 +8442,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x78, + 0x8c, 0x01, 0x00, 0x00, @@ -8002,15 +8458,15 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x79, + 0x8d, 0x01, 0x00, 0x00, - 0x78, + 0x8c, 0x01, 0x00, 0x00, - 0x77, + 0x8b, 0x01, 0x00, 0x00, @@ -8022,7 +8478,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x01, 0x00, 0x00, - 0x79, + 0x8d, 0x01, 0x00, 0x00, @@ -8050,7 +8506,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x7a, + 0x8e, 0x01, 0x00, 0x00, @@ -8070,11 +8526,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x7b, + 0x8f, 0x01, 0x00, 0x00, - 0x7a, + 0x8e, 0x01, 0x00, 0x00, @@ -8086,11 +8542,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x7c, + 0x90, 0x01, 0x00, 0x00, - 0x7b, + 0x8f, 0x01, 0x00, 0x00, @@ -8102,7 +8558,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x03, 0x00, - 0x7e, + 0x92, 0x01, 0x00, 0x00, @@ -8114,15 +8570,15 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x04, 0x00, - 0x7c, + 0x90, 0x01, 0x00, 0x00, - 0x7d, + 0x91, 0x01, 0x00, 0x00, - 0x7e, + 0x92, 0x01, 0x00, 0x00, @@ -8130,7 +8586,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x02, 0x00, - 0x7d, + 0x91, 0x01, 0x00, 0x00, @@ -8142,7 +8598,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x80, + 0x94, 0x01, 0x00, 0x00, @@ -8158,7 +8614,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x83, + 0x97, 0x01, 0x00, 0x00, @@ -8170,11 +8626,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x80, + 0x94, 0x01, 0x00, 0x00, - 0x82, + 0x96, 0x01, 0x00, 0x00, @@ -8182,11 +8638,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x03, 0x00, - 0x7f, + 0x93, 0x01, 0x00, 0x00, - 0x83, + 0x97, 0x01, 0x00, 0x00, @@ -8198,7 +8654,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x84, + 0x98, 0x01, 0x00, 0x00, @@ -8214,11 +8670,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x85, + 0x99, 0x01, 0x00, 0x00, - 0x7f, + 0x93, 0x01, 0x00, 0x00, @@ -8230,7 +8686,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x86, + 0x9a, 0x01, 0x00, 0x00, @@ -8250,11 +8706,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x87, + 0x9b, 0x01, 0x00, 0x00, - 0x86, + 0x9a, 0x01, 0x00, 0x00, @@ -8266,19 +8722,19 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x88, + 0x9c, 0x01, 0x00, 0x00, - 0x87, + 0x9b, 0x01, 0x00, 0x00, - 0x87, + 0x9b, 0x01, 0x00, 0x00, - 0x87, + 0x9b, 0x01, 0x00, 0x00, @@ -8290,7 +8746,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x89, + 0x9d, 0x01, 0x00, 0x00, @@ -8302,15 +8758,15 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x84, + 0x98, 0x01, 0x00, 0x00, - 0x85, + 0x99, 0x01, 0x00, 0x00, - 0x88, + 0x9c, 0x01, 0x00, 0x00, @@ -8322,7 +8778,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x01, 0x00, 0x00, - 0x89, + 0x9d, 0x01, 0x00, 0x00, @@ -8330,7 +8786,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x02, 0x00, - 0x7e, + 0x92, 0x01, 0x00, 0x00, @@ -8338,7 +8794,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x02, 0x00, - 0x7e, + 0x92, 0x01, 0x00, 0x00, @@ -8350,7 +8806,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x8b, + 0x9f, 0x01, 0x00, 0x00, @@ -8366,7 +8822,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x8c, + 0xa0, 0x01, 0x00, 0x00, @@ -8386,15 +8842,15 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x8d, + 0xa1, 0x01, 0x00, 0x00, - 0x8b, + 0x9f, 0x01, 0x00, 0x00, - 0x8c, + 0xa0, 0x01, 0x00, 0x00, @@ -8402,11 +8858,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x03, 0x00, - 0x8a, + 0x9e, 0x01, 0x00, 0x00, - 0x8d, + 0xa1, 0x01, 0x00, 0x00, @@ -8418,11 +8874,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x8f, + 0xa3, 0x01, 0x00, 0x00, - 0x8a, + 0x9e, 0x01, 0x00, 0x00, @@ -8434,11 +8890,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x90, + 0xa4, 0x01, 0x00, 0x00, - 0x8a, + 0x9e, 0x01, 0x00, 0x00, @@ -8450,15 +8906,15 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x91, + 0xa5, 0x01, 0x00, 0x00, - 0x8f, + 0xa3, 0x01, 0x00, 0x00, - 0x90, + 0xa4, 0x01, 0x00, 0x00, @@ -8470,7 +8926,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x92, + 0xa6, 0x01, 0x00, 0x00, @@ -8490,11 +8946,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x93, + 0xa7, 0x01, 0x00, 0x00, - 0x92, + 0xa6, 0x01, 0x00, 0x00, @@ -8506,15 +8962,15 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x94, + 0xa8, 0x01, 0x00, 0x00, - 0x91, + 0xa5, 0x01, 0x00, 0x00, - 0x93, + 0xa7, 0x01, 0x00, 0x00, @@ -8526,7 +8982,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x95, + 0xa9, 0x01, 0x00, 0x00, @@ -8534,7 +8990,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x94, + 0xa8, 0x01, 0x00, 0x00, @@ -8542,11 +8998,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x03, 0x00, - 0x8e, + 0xa2, 0x01, 0x00, 0x00, - 0x95, + 0xa9, 0x01, 0x00, 0x00, @@ -8558,11 +9014,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x96, + 0xaa, 0x01, 0x00, 0x00, - 0x8e, + 0xa2, 0x01, 0x00, 0x00, @@ -8574,7 +9030,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x97, + 0xab, 0x01, 0x00, 0x00, @@ -8586,7 +9042,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x96, + 0xaa, 0x01, 0x00, 0x00, @@ -8606,7 +9062,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x98, + 0xac, 0x01, 0x00, 0x00, @@ -8622,15 +9078,15 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x99, + 0xad, 0x01, 0x00, 0x00, - 0x98, + 0xac, 0x01, 0x00, 0x00, - 0x97, + 0xab, 0x01, 0x00, 0x00, @@ -8642,7 +9098,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x01, 0x00, 0x00, - 0x99, + 0xad, 0x01, 0x00, 0x00, @@ -8654,7 +9110,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x9b, + 0xaf, 0x01, 0x00, 0x00, @@ -8662,7 +9118,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x9a, + 0xae, 0x01, 0x00, 0x00, @@ -8674,11 +9130,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x9c, + 0xb0, 0x01, 0x00, 0x00, - 0x9b, + 0xaf, 0x01, 0x00, 0x00, @@ -8690,11 +9146,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x9d, + 0xb1, 0x01, 0x00, 0x00, - 0x9c, + 0xb0, 0x01, 0x00, 0x00, @@ -8706,7 +9162,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x03, 0x00, - 0x9f, + 0xb3, 0x01, 0x00, 0x00, @@ -8718,278 +9174,10 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x04, 0x00, - 0x9d, - 0x01, - 0x00, - 0x00, - 0x9e, - 0x01, - 0x00, - 0x00, - 0x9f, - 0x01, - 0x00, - 0x00, - 0xf8, - 0x00, - 0x02, - 0x00, - 0x9e, - 0x01, - 0x00, - 0x00, - 0x41, - 0x00, - 0x05, - 0x00, - 0xa3, - 0x01, - 0x00, - 0x00, - 0xa4, - 0x01, - 0x00, - 0x00, - 0xa2, - 0x01, - 0x00, - 0x00, - 0x12, - 0x00, - 0x00, - 0x00, - 0x3d, - 0x00, - 0x04, - 0x00, - 0x06, - 0x00, - 0x00, - 0x00, - 0xa5, - 0x01, - 0x00, - 0x00, - 0xa4, - 0x01, - 0x00, - 0x00, - 0x85, - 0x00, - 0x05, - 0x00, - 0x06, - 0x00, - 0x00, - 0x00, - 0xa7, - 0x01, - 0x00, - 0x00, - 0xa5, - 0x01, - 0x00, - 0x00, - 0xa6, - 0x01, - 0x00, - 0x00, - 0x0c, - 0x00, - 0x06, - 0x00, - 0x06, - 0x00, - 0x00, - 0x00, - 0xa8, - 0x01, - 0x00, - 0x00, - 0x01, - 0x00, - 0x00, - 0x00, - 0x0a, - 0x00, - 0x00, - 0x00, - 0xa7, - 0x01, - 0x00, - 0x00, - 0x3e, - 0x00, - 0x03, - 0x00, - 0xa0, - 0x01, - 0x00, - 0x00, - 0xa8, - 0x01, - 0x00, - 0x00, - 0x3e, - 0x00, - 0x03, - 0x00, - 0xa9, - 0x01, - 0x00, - 0x00, - 0xab, - 0x01, - 0x00, - 0x00, - 0x3d, - 0x00, - 0x04, - 0x00, - 0x06, - 0x00, - 0x00, - 0x00, - 0xac, - 0x01, - 0x00, - 0x00, - 0xa0, - 0x01, - 0x00, - 0x00, - 0xb8, - 0x00, - 0x05, - 0x00, - 0x77, - 0x00, - 0x00, - 0x00, - 0xad, - 0x01, - 0x00, - 0x00, - 0xac, - 0x01, - 0x00, - 0x00, - 0xa6, - 0x01, - 0x00, - 0x00, - 0xf7, - 0x00, - 0x03, - 0x00, - 0xaf, - 0x01, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xfa, - 0x00, - 0x04, - 0x00, - 0xad, - 0x01, - 0x00, - 0x00, - 0xae, - 0x01, - 0x00, - 0x00, 0xb1, 0x01, 0x00, 0x00, - 0xf8, - 0x00, - 0x02, - 0x00, - 0xae, - 0x01, - 0x00, - 0x00, - 0x41, - 0x00, - 0x05, - 0x00, - 0x13, - 0x00, - 0x00, - 0x00, - 0xb0, - 0x01, - 0x00, - 0x00, - 0xa9, - 0x01, - 0x00, - 0x00, - 0x12, - 0x00, - 0x00, - 0x00, - 0x3e, - 0x00, - 0x03, - 0x00, - 0xb0, - 0x01, - 0x00, - 0x00, - 0x63, - 0x00, - 0x00, - 0x00, - 0xf9, - 0x00, - 0x02, - 0x00, - 0xaf, - 0x01, - 0x00, - 0x00, - 0xf8, - 0x00, - 0x02, - 0x00, - 0xb1, - 0x01, - 0x00, - 0x00, - 0x3d, - 0x00, - 0x04, - 0x00, - 0x06, - 0x00, - 0x00, - 0x00, - 0xb2, - 0x01, - 0x00, - 0x00, - 0xa0, - 0x01, - 0x00, - 0x00, - 0xb8, - 0x00, - 0x05, - 0x00, - 0x77, - 0x00, - 0x00, - 0x00, - 0xb4, - 0x01, - 0x00, - 0x00, 0xb2, 0x01, 0x00, @@ -8998,11 +9186,159 @@ static const uint8_t kpostfx_frag_spv[] = { 0x01, 0x00, 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0xb2, + 0x01, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0xb7, + 0x01, + 0x00, + 0x00, + 0xb8, + 0x01, + 0x00, + 0x00, + 0xb6, + 0x01, + 0x00, + 0x00, + 0x12, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xb9, + 0x01, + 0x00, + 0x00, + 0xb8, + 0x01, + 0x00, + 0x00, + 0x85, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xbb, + 0x01, + 0x00, + 0x00, + 0xb9, + 0x01, + 0x00, + 0x00, + 0xba, + 0x01, + 0x00, + 0x00, + 0x0c, + 0x00, + 0x06, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xbc, + 0x01, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x0a, + 0x00, + 0x00, + 0x00, + 0xbb, + 0x01, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0xb4, + 0x01, + 0x00, + 0x00, + 0xbc, + 0x01, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0xbd, + 0x01, + 0x00, + 0x00, + 0xbf, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xc0, + 0x01, + 0x00, + 0x00, + 0xb4, + 0x01, + 0x00, + 0x00, + 0xb8, + 0x00, + 0x05, + 0x00, + 0x77, + 0x00, + 0x00, + 0x00, + 0xc1, + 0x01, + 0x00, + 0x00, + 0xc0, + 0x01, + 0x00, + 0x00, + 0xba, + 0x01, + 0x00, + 0x00, 0xf7, 0x00, 0x03, 0x00, - 0xb6, + 0xc3, 0x01, 0x00, 0x00, @@ -9014,15 +9350,15 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x04, 0x00, - 0xb4, + 0xc1, 0x01, 0x00, 0x00, - 0xb5, + 0xc2, 0x01, 0x00, 0x00, - 0xb8, + 0xc5, 0x01, 0x00, 0x00, @@ -9030,7 +9366,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x02, 0x00, - 0xb5, + 0xc2, 0x01, 0x00, 0x00, @@ -9042,11 +9378,131 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xb7, + 0xc4, 0x01, 0x00, 0x00, - 0xa9, + 0xbd, + 0x01, + 0x00, + 0x00, + 0x12, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0xc4, + 0x01, + 0x00, + 0x00, + 0x63, + 0x00, + 0x00, + 0x00, + 0xf9, + 0x00, + 0x02, + 0x00, + 0xc3, + 0x01, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0xc5, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xc6, + 0x01, + 0x00, + 0x00, + 0xb4, + 0x01, + 0x00, + 0x00, + 0xb8, + 0x00, + 0x05, + 0x00, + 0x77, + 0x00, + 0x00, + 0x00, + 0xc8, + 0x01, + 0x00, + 0x00, + 0xc6, + 0x01, + 0x00, + 0x00, + 0xc7, + 0x01, + 0x00, + 0x00, + 0xf7, + 0x00, + 0x03, + 0x00, + 0xca, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xfa, + 0x00, + 0x04, + 0x00, + 0xc8, + 0x01, + 0x00, + 0x00, + 0xc9, + 0x01, + 0x00, + 0x00, + 0xcc, + 0x01, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0xc9, + 0x01, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x13, + 0x00, + 0x00, + 0x00, + 0xcb, + 0x01, + 0x00, + 0x00, + 0xbd, 0x01, 0x00, 0x00, @@ -9058,7 +9514,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x03, 0x00, - 0xb7, + 0xcb, 0x01, 0x00, 0x00, @@ -9070,7 +9526,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x02, 0x00, - 0xb6, + 0xca, 0x01, 0x00, 0x00, @@ -9078,7 +9534,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x02, 0x00, - 0xb8, + 0xcc, 0x01, 0x00, 0x00, @@ -9090,11 +9546,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xb9, + 0xcd, 0x01, 0x00, 0x00, - 0xa9, + 0xbd, 0x01, 0x00, 0x00, @@ -9106,7 +9562,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x03, 0x00, - 0xb9, + 0xcd, 0x01, 0x00, 0x00, @@ -9118,7 +9574,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x02, 0x00, - 0xb6, + 0xca, 0x01, 0x00, 0x00, @@ -9126,7 +9582,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x02, 0x00, - 0xb6, + 0xca, 0x01, 0x00, 0x00, @@ -9134,7 +9590,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x02, 0x00, - 0xaf, + 0xc3, 0x01, 0x00, 0x00, @@ -9142,7 +9598,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x02, 0x00, - 0xaf, + 0xc3, 0x01, 0x00, 0x00, @@ -9154,7 +9610,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xba, + 0xce, 0x01, 0x00, 0x00, @@ -9170,7 +9626,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xbb, + 0xcf, 0x01, 0x00, 0x00, @@ -9186,11 +9642,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xbc, + 0xd0, 0x01, 0x00, 0x00, - 0xa9, + 0xbd, 0x01, 0x00, 0x00, @@ -9202,15 +9658,15 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xbd, + 0xd1, 0x01, 0x00, 0x00, - 0xbb, + 0xcf, 0x01, 0x00, 0x00, - 0xbc, + 0xd0, 0x01, 0x00, 0x00, @@ -9222,7 +9678,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xbe, + 0xd2, 0x01, 0x00, 0x00, @@ -9230,7 +9686,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x9a, + 0xae, 0x01, 0x00, 0x00, @@ -9242,11 +9698,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xbf, + 0xd3, 0x01, 0x00, 0x00, - 0xbe, + 0xd2, 0x01, 0x00, 0x00, @@ -9258,19 +9714,19 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xc0, + 0xd4, 0x01, 0x00, 0x00, - 0xbf, + 0xd3, 0x01, 0x00, 0x00, - 0xbf, + 0xd3, 0x01, 0x00, 0x00, - 0xbf, + 0xd3, 0x01, 0x00, 0x00, @@ -9282,7 +9738,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xc1, + 0xd5, 0x01, 0x00, 0x00, @@ -9294,15 +9750,15 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xba, + 0xce, 0x01, 0x00, 0x00, - 0xbd, + 0xd1, 0x01, 0x00, 0x00, - 0xc0, + 0xd4, 0x01, 0x00, 0x00, @@ -9314,7 +9770,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x01, 0x00, 0x00, - 0xc1, + 0xd5, 0x01, 0x00, 0x00, @@ -9322,7 +9778,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x02, 0x00, - 0x9f, + 0xb3, 0x01, 0x00, 0x00, @@ -9330,7 +9786,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x02, 0x00, - 0x9f, + 0xb3, 0x01, 0x00, 0x00, @@ -9342,7 +9798,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xc3, + 0xd7, 0x01, 0x00, 0x00, @@ -9350,7 +9806,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xc2, + 0xd6, 0x01, 0x00, 0x00, @@ -9362,11 +9818,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xc4, + 0xd8, 0x01, 0x00, 0x00, - 0xc3, + 0xd7, 0x01, 0x00, 0x00, @@ -9378,11 +9834,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xc5, + 0xd9, 0x01, 0x00, 0x00, - 0xc4, + 0xd8, 0x01, 0x00, 0x00, @@ -9394,7 +9850,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x03, 0x00, - 0xc7, + 0xdb, 0x01, 0x00, 0x00, @@ -9406,15 +9862,15 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x04, 0x00, - 0xc5, + 0xd9, 0x01, 0x00, 0x00, - 0xc6, + 0xda, 0x01, 0x00, 0x00, - 0xc7, + 0xdb, 0x01, 0x00, 0x00, @@ -9422,7 +9878,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x02, 0x00, - 0xc6, + 0xda, 0x01, 0x00, 0x00, @@ -9434,7 +9890,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xc9, + 0xdd, 0x01, 0x00, 0x00, @@ -9454,11 +9910,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xca, + 0xde, 0x01, 0x00, 0x00, - 0xc9, + 0xdd, 0x01, 0x00, 0x00, @@ -9470,15 +9926,15 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xcc, + 0xe0, 0x01, 0x00, 0x00, - 0xca, + 0xde, 0x01, 0x00, 0x00, - 0xcb, + 0xdf, 0x01, 0x00, 0x00, @@ -9490,7 +9946,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xcd, + 0xe1, 0x01, 0x00, 0x00, @@ -9502,7 +9958,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xcc, + 0xe0, 0x01, 0x00, 0x00, @@ -9514,11 +9970,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xce, + 0xe2, 0x01, 0x00, 0x00, - 0xcd, + 0xe1, 0x01, 0x00, 0x00, @@ -9534,11 +9990,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xcf, + 0xe3, 0x01, 0x00, 0x00, - 0xce, + 0xe2, 0x01, 0x00, 0x00, @@ -9550,11 +10006,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x03, 0x00, - 0xc8, + 0xdc, 0x01, 0x00, 0x00, - 0xcf, + 0xe3, 0x01, 0x00, 0x00, @@ -9566,7 +10022,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xd0, + 0xe4, 0x01, 0x00, 0x00, @@ -9574,7 +10030,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xc2, + 0xd6, 0x01, 0x00, 0x00, @@ -9586,11 +10042,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xd1, + 0xe5, 0x01, 0x00, 0x00, - 0xd0, + 0xe4, 0x01, 0x00, 0x00, @@ -9602,15 +10058,15 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xd3, + 0xe7, 0x01, 0x00, 0x00, - 0xd1, + 0xe5, 0x01, 0x00, 0x00, - 0xd2, + 0xe6, 0x01, 0x00, 0x00, @@ -9622,11 +10078,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xd4, + 0xe8, 0x01, 0x00, 0x00, - 0xc8, + 0xdc, 0x01, 0x00, 0x00, @@ -9638,15 +10094,15 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xd5, + 0xe9, 0x01, 0x00, 0x00, - 0xd3, + 0xe7, 0x01, 0x00, 0x00, - 0xd4, + 0xe8, 0x01, 0x00, 0x00, @@ -9658,7 +10114,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xd6, + 0xea, 0x01, 0x00, 0x00, @@ -9666,7 +10122,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xd5, + 0xe9, 0x01, 0x00, 0x00, @@ -9678,7 +10134,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xd7, + 0xeb, 0x01, 0x00, 0x00, @@ -9694,15 +10150,15 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xd8, + 0xec, 0x01, 0x00, 0x00, - 0xd7, + 0xeb, 0x01, 0x00, 0x00, - 0xd6, + 0xea, 0x01, 0x00, 0x00, @@ -9714,7 +10170,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x01, 0x00, 0x00, - 0xd8, + 0xec, 0x01, 0x00, 0x00, @@ -9722,7 +10178,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x02, 0x00, - 0xc7, + 0xdb, 0x01, 0x00, 0x00, @@ -9730,7 +10186,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x02, 0x00, - 0xc7, + 0xdb, 0x01, 0x00, 0x00, @@ -9742,7 +10198,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xd9, + 0xed, 0x01, 0x00, 0x00, @@ -9758,11 +10214,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xda, + 0xee, 0x01, 0x00, 0x00, - 0xd9, + 0xed, 0x01, 0x00, 0x00, @@ -9778,11 +10234,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xdb, + 0xef, 0x01, 0x00, 0x00, - 0xd9, + 0xed, 0x01, 0x00, 0x00, @@ -9798,11 +10254,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xdc, + 0xf0, 0x01, 0x00, 0x00, - 0xd9, + 0xed, 0x01, 0x00, 0x00, @@ -9818,19 +10274,19 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xdd, + 0xf1, 0x01, 0x00, 0x00, - 0xda, + 0xee, 0x01, 0x00, 0x00, - 0xdb, + 0xef, 0x01, 0x00, 0x00, - 0xdc, + 0xf0, 0x01, 0x00, 0x00, @@ -9846,7 +10302,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xdd, + 0xf1, 0x01, 0x00, 0x00, @@ -11259,4 +11715,4 @@ static const uint8_t kpostfx_frag_spv[] = { 0x01, 0x00, }; -static const size_t kpostfx_frag_spv_size = 11256; +static const size_t kpostfx_frag_spv_size = 11712; diff --git a/source/core/rendering/sdl3gpu/sdl3gpu_shader.cpp b/source/core/rendering/sdl3gpu/sdl3gpu_shader.cpp index 3d647ee..c102f66 100644 --- a/source/core/rendering/sdl3gpu/sdl3gpu_shader.cpp +++ b/source/core/rendering/sdl3gpu/sdl3gpu_shader.cpp @@ -131,19 +131,18 @@ fragment float4 postfx_fs(PostVOut in [[stage_in]], colour = mix(colour, lin, u.gamma_strength); } - // Scanlines — 1 pixel físico oscuro por fila lógica. - // Usa uv.y (independiente del offset de letterbox) con pixel_scale para - // calcular la posición dentro de la fila en coordenadas físicas. - // 3x: 1 dark + 2 bright. 4x: 1 dark + 3 bright. - // bright=3.5×, dark floor=0.42 (mantiene aspecto CRT original). - // ** MOD ** bright=1.0×, dark floor=0.42 (mantiene aspecto CRT original). + // Scanlines — proporción 2/3 brillantes + 1/3 oscuras por fila lógica. + // Casos especiales: 1 subfila → sin efecto; 2 subfilas → 1+1 (50/50). + // Constantes ajustables: + const float SCAN_DARK_RATIO = 0.333f; // fracción de subfilas oscuras (ps >= 3) + const float SCAN_DARK_FLOOR = 0.42f; // multiplicador de brillo de subfilas oscuras if (u.scanline_strength > 0.0f) { float ps = max(1.0f, round(u.pixel_scale)); float frac_in_row = fract(uv.y * u.screen_height); float row_pos = floor(frac_in_row * ps); - float is_dark = step(ps - 1.0f, row_pos); - //float scan = mix(3.5f, 0.42f, is_dark); - float scan = mix(1.0f, 0.42f, is_dark); + float bright_rows = (ps < 2.0f) ? ps : ((ps < 3.0f) ? 1.0f : floor(ps * (1.0f - SCAN_DARK_RATIO))); + float is_dark = step(bright_rows, row_pos); + float scan = mix(1.0f, SCAN_DARK_FLOOR, is_dark); colour *= mix(1.0f, scan, u.scanline_strength); }