diff --git a/data/shaders/postfx.frag b/data/shaders/postfx.frag index 2a9788d..84106f1 100644 --- a/data/shaders/postfx.frag +++ b/data/shaders/postfx.frag @@ -6,7 +6,9 @@ // xxd -i postfx.frag.spv > ../../source/core/rendering/sdl3gpu/postfx_frag_spv.h // // PostFXUniforms must match exactly the C++ struct in sdl3gpu_shader.hpp -// (8 floats, 32 bytes, std140/scalar layout). +// (16 floats = 4 × vec4 = 64 bytes, std140/scalar layout). +// IMPORTANT: Qualsevol canvi ací cal replicar-lo a mà a +// source/core/rendering/sdl3gpu/msl/postfx_frag.msl.h (no hi ha generador). layout(location = 0) in vec2 v_uv; layout(location = 0) out vec4 out_color; @@ -25,7 +27,12 @@ layout(set = 3, binding = 0) uniform PostFXUniforms { float pixel_scale; // physical pixels per logical pixel (vh / tex_height_) float time; // seconds since SDL init float oversample; // supersampling factor (1.0 = off, 3.0 = 3×SS) - float flicker; // 0 = off, 1 = phosphor flicker ~50 Hz — 48 bytes total (3 × 16) + float flicker; // 0 = off, 1 = phosphor flicker ~50 Hz + // vec4 #3 — paràmetres de scanlines (exposats per preset YAML) + float scan_dark_ratio; // fracció de subfila fosca per fila lògica (1/3 ≈ 0.333) + float scan_dark_floor; // multiplicador de brillantor de la subfila fosca + float scan_edge_soft; // 0 = step dur; 1 = suavitzat d'1 píxel físic (estil crtpi) + float pad3; // padding per tancar a 64 bytes (4 × vec4) } u; // YCbCr helpers for NTSC bleeding @@ -96,22 +103,20 @@ void main() { colour = mix(colour, lin, u.gamma_strength); } - // 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 + // Scanlines — tècnica dels 3 subpíxels verticals per píxel lògic (aee/projecte_2026): + // franja fosca ocupant `scan_dark_ratio` al final de cada fila lògica. La transició es + // suavitza amb smoothstep d'ample ≈ 1 píxel físic (estil crtpi: filtratge analític + // continu), controlat per `scan_edge_soft`. A 0 és equivalent al step dur antic. 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); - // 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); + float ps = max(u.pixel_scale, 1.0); + float sub = fract(uv.y * u.screen_height); // [0,1) dins la fila lògica + float dark_center = 1.0 - u.scan_dark_ratio * 0.5; // centre de la franja fosca + float d = abs(sub - dark_center); + d = min(d, 1.0 - d); // wrap a la fila següent + float half_width = u.scan_dark_ratio * 0.5; + float softness = u.scan_edge_soft * 0.5 / ps; // mig píxel físic a cada costat + float band = 1.0 - smoothstep(half_width - softness, half_width + softness, d); + float scan = mix(1.0, u.scan_dark_floor, band); colour *= mix(1.0, scan, u.scanline_strength); } diff --git a/source/core/rendering/sdl3gpu/msl/postfx_frag.msl.h b/source/core/rendering/sdl3gpu/msl/postfx_frag.msl.h index 0a9fce8..cfd2dba 100644 --- a/source/core/rendering/sdl3gpu/msl/postfx_frag.msl.h +++ b/source/core/rendering/sdl3gpu/msl/postfx_frag.msl.h @@ -4,6 +4,11 @@ // Fragment shader del shader "postfx": vignette, chroma, scanlines, mask, // gamma, curvature, bleeding i flicker. Els paràmetres venen via uniforms. +// +// IMPORTANT: mantenir sincronitzat a mà amb data/shaders/postfx.frag. SDL3 GPU +// compila aquest string MSL en runtime; no hi ha generador automàtic. Qualsevol +// canvi a la struct d'uniforms o a la lògica del GLSL cal replicar-lo ací al +// mateix commit. Mida total = 64 bytes (4 × vec4). namespace Rendering::Msl { inline constexpr const char* kPostfxFrag = R"( @@ -28,6 +33,11 @@ struct PostFXUniforms { float time; float oversample; float flicker; + // vec4 #3 — paràmetres de scanlines (exposats per preset YAML) + float scan_dark_ratio; + float scan_dark_floor; + float scan_edge_soft; + float pad3; }; static float3 rgb_to_ycc(float3 rgb) { @@ -93,15 +103,19 @@ fragment float4 postfx_fs(PostVOut in [[stage_in]], colour = mix(colour, lin, u.gamma_strength); } - const float SCAN_DARK_RATIO = 0.333f; - const float SCAN_DARK_FLOOR = 0.42f; + // Scanlines — 3 subpíxels per fila lògica (2 brillants + 1 fosca). Transició + // suavitzada amb smoothstep d'ample ≈ 1 píxel físic (estil crtpi: filtratge + // analític continu). scan_edge_soft = 0 recupera el step dur de l'original. 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 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); + float ps = max(u.pixel_scale, 1.0f); + float sub = fract(uv.y * u.screen_height); + float dark_center = 1.0f - u.scan_dark_ratio * 0.5f; + float d = abs(sub - dark_center); + d = min(d, 1.0f - d); + float half_width = u.scan_dark_ratio * 0.5f; + float softness = u.scan_edge_soft * 0.5f / ps; + float band = 1.0f - smoothstep(half_width - softness, half_width + softness, d); + float scan = mix(1.0f, u.scan_dark_floor, band); colour *= mix(1.0f, scan, u.scanline_strength); } diff --git a/source/core/rendering/sdl3gpu/sdl3gpu_shader.cpp b/source/core/rendering/sdl3gpu/sdl3gpu_shader.cpp index f358a80..8579425 100644 --- a/source/core/rendering/sdl3gpu/sdl3gpu_shader.cpp +++ b/source/core/rendering/sdl3gpu/sdl3gpu_shader.cpp @@ -204,6 +204,12 @@ namespace Rendering { const SDL_GPUViewport VP = computeViewport(scaling_mode_, sw, sh, game_width_, game_height_); SDL_SetGPUViewport(pass, &VP); + // pixel_scale = píxels físics per fila lògica al viewport. El shader l'usa + // per ajustar l'ample del smoothstep de scanlines a 1 píxel físic (estil crtpi). + uniforms_.pixel_scale = (game_height_ > 0) + ? VP.h / static_cast(game_height_) + : 1.0F; + SDL_BindGPUGraphicsPipeline(pass, pipeline_); SDL_GPUTextureSamplerBinding binding{}; @@ -234,6 +240,9 @@ namespace Rendering { uniforms_.curvature = params.curvature; uniforms_.bleeding = params.bleeding; uniforms_.flicker = params.flicker; + uniforms_.scan_dark_ratio = params.scan_dark_ratio; + uniforms_.scan_dark_floor = params.scan_dark_floor; + uniforms_.scan_edge_soft = params.scan_edge_soft; } void SDL3GPUShader::setVSync(bool vsync) { diff --git a/source/core/rendering/sdl3gpu/sdl3gpu_shader.hpp b/source/core/rendering/sdl3gpu/sdl3gpu_shader.hpp index f3931cf..591a62a 100644 --- a/source/core/rendering/sdl3gpu/sdl3gpu_shader.hpp +++ b/source/core/rendering/sdl3gpu/sdl3gpu_shader.hpp @@ -11,20 +11,28 @@ #include "core/rendering/shader_backend.hpp" // Uniforms enviats al fragment stage cada frame. -// Han de coincidir amb l'estructura MSL/GLSL (48 bytes, alineats a 16). +// Han de coincidir amb l'estructura MSL/GLSL (64 bytes = 4 × vec4, alineats a 16). struct PostFXUniforms { + // vec4 #0 float vignette_strength; float chroma_strength; float scanline_strength; float screen_height; + // vec4 #1 float mask_strength; float gamma_strength; float curvature; float bleeding; + // vec4 #2 float pixel_scale; float time; float oversample; float flicker; + // vec4 #3 — paràmetres de scanlines exposats al preset YAML + float scan_dark_ratio; + float scan_dark_floor; + float scan_edge_soft; + float pad3; }; namespace Rendering { @@ -96,6 +104,11 @@ namespace Rendering { .time = 0.0F, .oversample = 1.0F, .flicker = 0.0F, + // Defaults canònics: 2/3 brillant + 1/3 fosca, brillantor 42%, suavitzat complet (1 px físic). + .scan_dark_ratio = 0.333F, + .scan_dark_floor = 0.42F, + .scan_edge_soft = 1.0F, + .pad3 = 0.0F, }; int game_width_{0}; diff --git a/source/core/rendering/sdl3gpu/spv/postfx_frag_spv.h b/source/core/rendering/sdl3gpu/spv/postfx_frag_spv.h index a60ea13..e941853 100644 --- a/source/core/rendering/sdl3gpu/spv/postfx_frag_spv.h +++ b/source/core/rendering/sdl3gpu/spv/postfx_frag_spv.h @@ -14,7 +14,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x0d, 0x00, - 0xf2, + 0xf9, 0x01, 0x00, 0x00, @@ -102,7 +102,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xb6, + 0xbd, 0x01, 0x00, 0x00, @@ -690,6 +690,110 @@ static const uint8_t kpostfx_frag_spv[] = { 0x65, 0x72, 0x00, + 0x06, + 0x00, + 0x07, + 0x00, + 0x6f, + 0x00, + 0x00, + 0x00, + 0x0c, + 0x00, + 0x00, + 0x00, + 0x73, + 0x63, + 0x61, + 0x6e, + 0x5f, + 0x64, + 0x61, + 0x72, + 0x6b, + 0x5f, + 0x72, + 0x61, + 0x74, + 0x69, + 0x6f, + 0x00, + 0x06, + 0x00, + 0x07, + 0x00, + 0x6f, + 0x00, + 0x00, + 0x00, + 0x0d, + 0x00, + 0x00, + 0x00, + 0x73, + 0x63, + 0x61, + 0x6e, + 0x5f, + 0x64, + 0x61, + 0x72, + 0x6b, + 0x5f, + 0x66, + 0x6c, + 0x6f, + 0x6f, + 0x72, + 0x00, + 0x06, + 0x00, + 0x07, + 0x00, + 0x6f, + 0x00, + 0x00, + 0x00, + 0x0e, + 0x00, + 0x00, + 0x00, + 0x73, + 0x63, + 0x61, + 0x6e, + 0x5f, + 0x65, + 0x64, + 0x67, + 0x65, + 0x5f, + 0x73, + 0x6f, + 0x66, + 0x74, + 0x00, + 0x00, + 0x06, + 0x00, + 0x05, + 0x00, + 0x6f, + 0x00, + 0x00, + 0x00, + 0x0f, + 0x00, + 0x00, + 0x00, + 0x70, + 0x61, + 0x64, + 0x33, + 0x00, + 0x00, + 0x00, + 0x00, 0x05, 0x00, 0x03, @@ -1068,81 +1172,109 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x05, 0x00, - 0x05, + 0x03, 0x00, - 0x5e, + 0x5d, 0x01, 0x00, 0x00, - 0x66, - 0x72, - 0x61, - 0x63, - 0x5f, - 0x69, - 0x6e, - 0x5f, - 0x72, - 0x6f, - 0x77, - 0x00, - 0x05, - 0x00, - 0x04, - 0x00, - 0x66, - 0x01, - 0x00, - 0x00, - 0x72, - 0x6f, - 0x77, - 0x5f, - 0x70, - 0x6f, 0x73, - 0x00, - 0x05, - 0x00, - 0x05, - 0x00, - 0x6b, - 0x01, - 0x00, - 0x00, + 0x75, 0x62, - 0x72, - 0x69, - 0x67, - 0x68, - 0x74, - 0x5f, - 0x72, - 0x6f, - 0x77, - 0x73, 0x00, 0x05, 0x00, - 0x04, + 0x05, 0x00, - 0x80, + 0x65, 0x01, 0x00, 0x00, - 0x69, - 0x73, - 0x5f, 0x64, 0x61, 0x72, 0x6b, + 0x5f, + 0x63, + 0x65, + 0x6e, + 0x74, + 0x65, + 0x72, + 0x00, + 0x05, + 0x00, + 0x03, + 0x00, + 0x6b, + 0x01, + 0x00, + 0x00, + 0x64, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x05, + 0x00, + 0x74, + 0x01, + 0x00, + 0x00, + 0x68, + 0x61, + 0x6c, + 0x66, + 0x5f, + 0x77, + 0x69, + 0x64, + 0x74, + 0x68, + 0x00, + 0x00, + 0x05, + 0x00, + 0x05, + 0x00, + 0x78, + 0x01, + 0x00, + 0x00, + 0x73, + 0x6f, + 0x66, + 0x74, + 0x6e, + 0x65, + 0x73, + 0x73, + 0x00, + 0x00, + 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, - 0x84, + 0x7f, + 0x01, + 0x00, + 0x00, + 0x62, + 0x61, + 0x6e, + 0x64, + 0x00, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x04, + 0x00, + 0x89, 0x01, 0x00, 0x00, @@ -1158,7 +1290,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x03, 0x00, - 0x93, + 0x9a, 0x01, 0x00, 0x00, @@ -1170,7 +1302,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x03, 0x00, - 0x9e, + 0xa5, 0x01, 0x00, 0x00, @@ -1182,7 +1314,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x05, 0x00, - 0xa2, + 0xa9, 0x01, 0x00, 0x00, @@ -1202,7 +1334,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x05, 0x00, - 0xb4, + 0xbb, 0x01, 0x00, 0x00, @@ -1222,7 +1354,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x06, 0x00, - 0xb6, + 0xbd, 0x01, 0x00, 0x00, @@ -1246,7 +1378,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x04, 0x00, - 0xbd, + 0xc4, 0x01, 0x00, 0x00, @@ -1262,7 +1394,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x06, 0x00, - 0xdc, + 0xe3, 0x01, 0x00, 0x00, @@ -1550,6 +1682,86 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, + 0x48, + 0x00, + 0x05, + 0x00, + 0x6f, + 0x00, + 0x00, + 0x00, + 0x0c, + 0x00, + 0x00, + 0x00, + 0x23, + 0x00, + 0x00, + 0x00, + 0x30, + 0x00, + 0x00, + 0x00, + 0x48, + 0x00, + 0x05, + 0x00, + 0x6f, + 0x00, + 0x00, + 0x00, + 0x0d, + 0x00, + 0x00, + 0x00, + 0x23, + 0x00, + 0x00, + 0x00, + 0x34, + 0x00, + 0x00, + 0x00, + 0x48, + 0x00, + 0x05, + 0x00, + 0x6f, + 0x00, + 0x00, + 0x00, + 0x0e, + 0x00, + 0x00, + 0x00, + 0x23, + 0x00, + 0x00, + 0x00, + 0x38, + 0x00, + 0x00, + 0x00, + 0x48, + 0x00, + 0x05, + 0x00, + 0x6f, + 0x00, + 0x00, + 0x00, + 0x0f, + 0x00, + 0x00, + 0x00, + 0x23, + 0x00, + 0x00, + 0x00, + 0x3c, + 0x00, + 0x00, + 0x00, 0x47, 0x00, 0x04, @@ -1634,7 +1846,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x04, 0x00, - 0xb6, + 0xbd, 0x01, 0x00, 0x00, @@ -2096,7 +2308,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x1e, 0x00, - 0x0e, + 0x12, 0x00, 0x6f, 0x00, @@ -2150,6 +2362,22 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, 0x20, 0x00, 0x04, @@ -2754,7 +2982,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x61, + 0x60, 0x01, 0x00, 0x00, @@ -2766,18 +2994,50 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x04, 0x00, - 0x06, + 0x72, 0x00, 0x00, 0x00, - 0x74, + 0x66, 0x01, 0x00, 0x00, + 0x0c, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x72, + 0x00, + 0x00, + 0x00, + 0x79, + 0x01, + 0x00, + 0x00, + 0x0e, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x72, + 0x00, + 0x00, + 0x00, + 0x8a, + 0x01, + 0x00, + 0x00, + 0x0d, + 0x00, 0x00, 0x00, - 0x40, - 0x40, 0x2b, 0x00, 0x04, @@ -2786,39 +3046,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x7b, - 0x01, - 0x00, - 0x00, - 0x83, - 0xc0, - 0x2a, - 0x3f, - 0x2b, - 0x00, - 0x04, - 0x00, - 0x06, - 0x00, - 0x00, - 0x00, - 0x85, - 0x01, - 0x00, - 0x00, - 0x3d, - 0x0a, - 0xd7, - 0x3e, - 0x2b, - 0x00, - 0x04, - 0x00, - 0x06, - 0x00, - 0x00, - 0x00, - 0x95, + 0x9c, 0x01, 0x00, 0x00, @@ -2834,19 +3062,19 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x96, + 0x9d, 0x01, 0x00, 0x00, - 0x95, + 0x9c, 0x01, 0x00, 0x00, - 0x95, + 0x9c, 0x01, 0x00, 0x00, - 0x95, + 0x9c, 0x01, 0x00, 0x00, @@ -2858,7 +3086,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xae, + 0xb5, 0x01, 0x00, 0x00, @@ -2870,7 +3098,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x04, 0x00, - 0xb5, + 0xbc, 0x01, 0x00, 0x00, @@ -2886,11 +3114,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x04, 0x00, - 0xb5, + 0xbc, 0x01, 0x00, 0x00, - 0xb6, + 0xbd, 0x01, 0x00, 0x00, @@ -2902,7 +3130,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x04, 0x00, - 0xb7, + 0xbe, 0x01, 0x00, 0x00, @@ -2922,7 +3150,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xba, + 0xc1, 0x01, 0x00, 0x00, @@ -2938,7 +3166,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xbe, + 0xc5, 0x01, 0x00, 0x00, @@ -2954,19 +3182,19 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xbf, + 0xc6, 0x01, 0x00, 0x00, - 0xbe, + 0xc5, 0x01, 0x00, 0x00, - 0xbe, + 0xc5, 0x01, 0x00, 0x00, - 0xbe, + 0xc5, 0x01, 0x00, 0x00, @@ -2978,7 +3206,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xc7, + 0xce, 0x01, 0x00, 0x00, @@ -2994,7 +3222,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xd6, + 0xdd, 0x01, 0x00, 0x00, @@ -3010,7 +3238,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xdf, + 0xe6, 0x01, 0x00, 0x00, @@ -3026,7 +3254,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xe6, + 0xed, 0x01, 0x00, 0x00, @@ -3438,7 +3666,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x5e, + 0x5d, 0x01, 0x00, 0x00, @@ -3454,7 +3682,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x66, + 0x65, 0x01, 0x00, 0x00, @@ -3486,7 +3714,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x6e, + 0x74, 0x01, 0x00, 0x00, @@ -3502,7 +3730,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x76, + 0x78, 0x01, 0x00, 0x00, @@ -3518,7 +3746,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x80, + 0x7f, 0x01, 0x00, 0x00, @@ -3534,7 +3762,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x84, + 0x89, 0x01, 0x00, 0x00, @@ -3550,7 +3778,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x93, + 0x9a, 0x01, 0x00, 0x00, @@ -3566,7 +3794,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x9e, + 0xa5, 0x01, 0x00, 0x00, @@ -3582,7 +3810,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xa2, + 0xa9, 0x01, 0x00, 0x00, @@ -3598,7 +3826,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xb4, + 0xbb, 0x01, 0x00, 0x00, @@ -3614,7 +3842,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xbd, + 0xc4, 0x01, 0x00, 0x00, @@ -3630,7 +3858,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xdc, + 0xe3, 0x01, 0x00, 0x00, @@ -7564,37 +7792,13 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x0c, 0x00, - 0x06, - 0x00, - 0x06, - 0x00, - 0x00, - 0x00, - 0x5c, - 0x01, - 0x00, - 0x00, - 0x01, - 0x00, - 0x00, - 0x00, - 0x01, - 0x00, - 0x00, - 0x00, - 0x5b, - 0x01, - 0x00, - 0x00, - 0x0c, - 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x5d, + 0x5c, 0x01, 0x00, 0x00, @@ -7606,14 +7810,14 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, + 0x5b, + 0x01, + 0x00, + 0x00, 0x63, 0x00, 0x00, 0x00, - 0x5c, - 0x01, - 0x00, - 0x00, 0x3e, 0x00, 0x03, @@ -7622,7 +7826,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x01, 0x00, 0x00, - 0x5d, + 0x5c, 0x01, 0x00, 0x00, @@ -7634,7 +7838,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x5f, + 0x5e, 0x01, 0x00, 0x00, @@ -7654,11 +7858,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x60, + 0x5f, 0x01, 0x00, 0x00, - 0x5f, + 0x5e, 0x01, 0x00, 0x00, @@ -7670,7 +7874,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x62, + 0x61, 0x01, 0x00, 0x00, @@ -7678,7 +7882,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x61, + 0x60, 0x01, 0x00, 0x00, @@ -7690,11 +7894,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x63, + 0x62, 0x01, 0x00, 0x00, - 0x62, + 0x61, 0x01, 0x00, 0x00, @@ -7706,18 +7910,18 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x64, - 0x01, - 0x00, - 0x00, - 0x60, - 0x01, - 0x00, - 0x00, 0x63, 0x01, 0x00, 0x00, + 0x5f, + 0x01, + 0x00, + 0x00, + 0x62, + 0x01, + 0x00, + 0x00, 0x0c, 0x00, 0x06, @@ -7726,7 +7930,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x65, + 0x64, 0x01, 0x00, 0x00, @@ -7738,7 +7942,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x64, + 0x63, 0x01, 0x00, 0x00, @@ -7746,19 +7950,19 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x03, 0x00, - 0x5e, + 0x5d, 0x01, 0x00, 0x00, - 0x65, + 0x64, 0x01, 0x00, 0x00, - 0x3d, + 0x41, 0x00, - 0x04, + 0x05, 0x00, - 0x06, + 0x74, 0x00, 0x00, 0x00, @@ -7766,7 +7970,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x01, 0x00, 0x00, - 0x5e, + 0x71, + 0x00, + 0x00, + 0x00, + 0x66, 0x01, 0x00, 0x00, @@ -7782,7 +7990,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x01, 0x00, 0x00, - 0x58, + 0x67, 0x01, 0x00, 0x00, @@ -7798,17 +8006,17 @@ static const uint8_t kpostfx_frag_spv[] = { 0x01, 0x00, 0x00, - 0x67, - 0x01, - 0x00, - 0x00, 0x68, 0x01, 0x00, 0x00, - 0x0c, + 0x2c, 0x00, - 0x06, + 0x00, + 0x00, + 0x83, + 0x00, + 0x05, 0x00, 0x06, 0x00, @@ -7818,243 +8026,23 @@ static const uint8_t kpostfx_frag_spv[] = { 0x01, 0x00, 0x00, - 0x01, - 0x00, - 0x00, - 0x00, - 0x08, - 0x00, - 0x00, - 0x00, - 0x69, - 0x01, - 0x00, - 0x00, - 0x3e, - 0x00, - 0x03, - 0x00, - 0x66, - 0x01, - 0x00, - 0x00, - 0x6a, - 0x01, - 0x00, - 0x00, - 0x3d, - 0x00, - 0x04, - 0x00, - 0x06, - 0x00, - 0x00, - 0x00, - 0x6c, - 0x01, - 0x00, - 0x00, - 0x58, - 0x01, - 0x00, - 0x00, - 0xb8, - 0x00, - 0x05, - 0x00, - 0x77, - 0x00, - 0x00, - 0x00, - 0x6d, - 0x01, - 0x00, - 0x00, - 0x6c, - 0x01, - 0x00, - 0x00, - 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, - 0x00, - 0x06, - 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, + 0x69, 0x01, 0x00, 0x00, - 0xf8, + 0x3e, 0x00, - 0x02, + 0x03, 0x00, - 0x79, + 0x65, + 0x01, + 0x00, + 0x00, + 0x6a, 0x01, 0x00, 0x00, @@ -8066,15 +8054,31 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x7a, + 0x6c, 0x01, 0x00, 0x00, - 0x58, + 0x5d, 0x01, 0x00, 0x00, - 0x85, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x6d, + 0x01, + 0x00, + 0x00, + 0x65, + 0x01, + 0x00, + 0x00, + 0x83, 0x00, 0x05, 0x00, @@ -8082,15 +8086,15 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x7c, + 0x6e, 0x01, 0x00, 0x00, - 0x7a, + 0x6c, 0x01, 0x00, 0x00, - 0x7b, + 0x6d, 0x01, 0x00, 0x00, @@ -8102,7 +8106,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x7d, + 0x6f, 0x01, 0x00, 0x00, @@ -8110,96 +8114,8 @@ static const uint8_t kpostfx_frag_spv[] = { 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, @@ -8214,7 +8130,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x01, 0x00, 0x00, - 0x7f, + 0x6f, 0x01, 0x00, 0x00, @@ -8226,7 +8142,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x81, + 0x70, 0x01, 0x00, 0x00, @@ -8242,11 +8158,31 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x82, + 0x71, 0x01, 0x00, 0x00, - 0x66, + 0x6b, + 0x01, + 0x00, + 0x00, + 0x83, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x72, + 0x01, + 0x00, + 0x00, + 0x63, + 0x00, + 0x00, + 0x00, + 0x71, 0x01, 0x00, 0x00, @@ -8258,7 +8194,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x83, + 0x73, 0x01, 0x00, 0x00, @@ -8266,15 +8202,15 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x30, + 0x25, 0x00, 0x00, 0x00, - 0x81, + 0x70, 0x01, 0x00, 0x00, - 0x82, + 0x72, 0x01, 0x00, 0x00, @@ -8282,11 +8218,287 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x03, 0x00, + 0x6b, + 0x01, + 0x00, + 0x00, + 0x73, + 0x01, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x74, + 0x00, + 0x00, + 0x00, + 0x75, + 0x01, + 0x00, + 0x00, + 0x71, + 0x00, + 0x00, + 0x00, + 0x66, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x76, + 0x01, + 0x00, + 0x00, + 0x75, + 0x01, + 0x00, + 0x00, + 0x85, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x77, + 0x01, + 0x00, + 0x00, + 0x76, + 0x01, + 0x00, + 0x00, + 0x2c, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x74, + 0x01, + 0x00, + 0x00, + 0x77, + 0x01, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x74, + 0x00, + 0x00, + 0x00, + 0x7a, + 0x01, + 0x00, + 0x00, + 0x71, + 0x00, + 0x00, + 0x00, + 0x79, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x7b, + 0x01, + 0x00, + 0x00, + 0x7a, + 0x01, + 0x00, + 0x00, + 0x85, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x7c, + 0x01, + 0x00, + 0x00, + 0x7b, + 0x01, + 0x00, + 0x00, + 0x2c, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x7d, + 0x01, + 0x00, + 0x00, + 0x58, + 0x01, + 0x00, + 0x00, + 0x88, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x7e, + 0x01, + 0x00, + 0x00, + 0x7c, + 0x01, + 0x00, + 0x00, + 0x7d, + 0x01, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x78, + 0x01, + 0x00, + 0x00, + 0x7e, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, 0x80, 0x01, 0x00, 0x00, + 0x74, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x81, + 0x01, + 0x00, + 0x00, + 0x78, + 0x01, + 0x00, + 0x00, 0x83, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x82, + 0x01, + 0x00, + 0x00, + 0x80, + 0x01, + 0x00, + 0x00, + 0x81, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x83, + 0x01, + 0x00, + 0x00, + 0x74, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x84, + 0x01, + 0x00, + 0x00, + 0x78, + 0x01, + 0x00, + 0x00, + 0x81, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x85, + 0x01, + 0x00, + 0x00, + 0x83, + 0x01, + 0x00, + 0x00, + 0x84, 0x01, 0x00, 0x00, @@ -8302,7 +8514,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x01, 0x00, 0x00, - 0x80, + 0x6b, 0x01, 0x00, 0x00, @@ -8322,6 +8534,122 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, + 0x31, + 0x00, + 0x00, + 0x00, + 0x82, + 0x01, + 0x00, + 0x00, + 0x85, + 0x01, + 0x00, + 0x00, + 0x86, + 0x01, + 0x00, + 0x00, + 0x83, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x88, + 0x01, + 0x00, + 0x00, + 0x63, + 0x00, + 0x00, + 0x00, + 0x87, + 0x01, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x7f, + 0x01, + 0x00, + 0x00, + 0x88, + 0x01, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x74, + 0x00, + 0x00, + 0x00, + 0x8b, + 0x01, + 0x00, + 0x00, + 0x71, + 0x00, + 0x00, + 0x00, + 0x8a, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x8c, + 0x01, + 0x00, + 0x00, + 0x8b, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x8d, + 0x01, + 0x00, + 0x00, + 0x7f, + 0x01, + 0x00, + 0x00, + 0x0c, + 0x00, + 0x08, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x8e, + 0x01, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, 0x2e, 0x00, 0x00, @@ -8330,11 +8658,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x85, + 0x8c, 0x01, 0x00, 0x00, - 0x86, + 0x8d, 0x01, 0x00, 0x00, @@ -8342,11 +8670,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x03, 0x00, - 0x84, + 0x89, 0x01, 0x00, 0x00, - 0x87, + 0x8e, 0x01, 0x00, 0x00, @@ -8358,11 +8686,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x88, + 0x8f, 0x01, 0x00, 0x00, - 0x84, + 0x89, 0x01, 0x00, 0x00, @@ -8374,7 +8702,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x89, + 0x90, 0x01, 0x00, 0x00, @@ -8394,11 +8722,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x8a, + 0x91, 0x01, 0x00, 0x00, - 0x89, + 0x90, 0x01, 0x00, 0x00, @@ -8410,7 +8738,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x8b, + 0x92, 0x01, 0x00, 0x00, @@ -8426,11 +8754,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x88, + 0x8f, 0x01, 0x00, 0x00, - 0x8a, + 0x91, 0x01, 0x00, 0x00, @@ -8442,7 +8770,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x8c, + 0x93, 0x01, 0x00, 0x00, @@ -8458,15 +8786,15 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x8d, + 0x94, 0x01, 0x00, 0x00, - 0x8c, + 0x93, 0x01, 0x00, 0x00, - 0x8b, + 0x92, 0x01, 0x00, 0x00, @@ -8478,7 +8806,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x01, 0x00, 0x00, - 0x8d, + 0x94, 0x01, 0x00, 0x00, @@ -8506,7 +8834,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x8e, + 0x95, 0x01, 0x00, 0x00, @@ -8526,11 +8854,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x8f, + 0x96, 0x01, 0x00, 0x00, - 0x8e, + 0x95, 0x01, 0x00, 0x00, @@ -8542,11 +8870,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x90, + 0x97, 0x01, 0x00, 0x00, - 0x8f, + 0x96, 0x01, 0x00, 0x00, @@ -8558,7 +8886,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x03, 0x00, - 0x92, + 0x99, 0x01, 0x00, 0x00, @@ -8570,15 +8898,15 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x04, 0x00, - 0x90, + 0x97, 0x01, 0x00, 0x00, - 0x91, + 0x98, 0x01, 0x00, 0x00, - 0x92, + 0x99, 0x01, 0x00, 0x00, @@ -8586,7 +8914,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x02, 0x00, - 0x91, + 0x98, 0x01, 0x00, 0x00, @@ -8598,7 +8926,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x94, + 0x9b, 0x01, 0x00, 0x00, @@ -8614,7 +8942,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x97, + 0x9e, 0x01, 0x00, 0x00, @@ -8626,11 +8954,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x94, + 0x9b, 0x01, 0x00, 0x00, - 0x96, + 0x9d, 0x01, 0x00, 0x00, @@ -8638,11 +8966,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x03, 0x00, - 0x93, + 0x9a, 0x01, 0x00, 0x00, - 0x97, + 0x9e, 0x01, 0x00, 0x00, @@ -8654,7 +8982,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x98, + 0x9f, 0x01, 0x00, 0x00, @@ -8670,11 +8998,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x99, + 0xa0, 0x01, 0x00, 0x00, - 0x93, + 0x9a, 0x01, 0x00, 0x00, @@ -8686,7 +9014,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x9a, + 0xa1, 0x01, 0x00, 0x00, @@ -8706,11 +9034,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x9b, + 0xa2, 0x01, 0x00, 0x00, - 0x9a, + 0xa1, 0x01, 0x00, 0x00, @@ -8722,19 +9050,19 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x9c, + 0xa3, 0x01, 0x00, 0x00, - 0x9b, + 0xa2, 0x01, 0x00, 0x00, - 0x9b, + 0xa2, 0x01, 0x00, 0x00, - 0x9b, + 0xa2, 0x01, 0x00, 0x00, @@ -8746,7 +9074,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x9d, + 0xa4, 0x01, 0x00, 0x00, @@ -8758,15 +9086,15 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x98, + 0x9f, 0x01, 0x00, 0x00, - 0x99, + 0xa0, 0x01, 0x00, 0x00, - 0x9c, + 0xa3, 0x01, 0x00, 0x00, @@ -8778,7 +9106,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x01, 0x00, 0x00, - 0x9d, + 0xa4, 0x01, 0x00, 0x00, @@ -8786,7 +9114,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x02, 0x00, - 0x92, + 0x99, 0x01, 0x00, 0x00, @@ -8794,7 +9122,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x02, 0x00, - 0x92, + 0x99, 0x01, 0x00, 0x00, @@ -8806,7 +9134,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0x9f, + 0xa6, 0x01, 0x00, 0x00, @@ -8822,7 +9150,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xa0, + 0xa7, 0x01, 0x00, 0x00, @@ -8842,15 +9170,15 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xa1, + 0xa8, 0x01, 0x00, 0x00, - 0x9f, + 0xa6, 0x01, 0x00, 0x00, - 0xa0, + 0xa7, 0x01, 0x00, 0x00, @@ -8858,11 +9186,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x03, 0x00, - 0x9e, + 0xa5, 0x01, 0x00, 0x00, - 0xa1, + 0xa8, 0x01, 0x00, 0x00, @@ -8874,11 +9202,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xa3, + 0xaa, 0x01, 0x00, 0x00, - 0x9e, + 0xa5, 0x01, 0x00, 0x00, @@ -8890,11 +9218,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xa4, + 0xab, 0x01, 0x00, 0x00, - 0x9e, + 0xa5, 0x01, 0x00, 0x00, @@ -8906,15 +9234,15 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xa5, + 0xac, 0x01, 0x00, 0x00, - 0xa3, + 0xaa, 0x01, 0x00, 0x00, - 0xa4, + 0xab, 0x01, 0x00, 0x00, @@ -8926,7 +9254,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xa6, + 0xad, 0x01, 0x00, 0x00, @@ -8946,11 +9274,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xa7, + 0xae, 0x01, 0x00, 0x00, - 0xa6, + 0xad, 0x01, 0x00, 0x00, @@ -8962,15 +9290,15 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xa8, + 0xaf, 0x01, 0x00, 0x00, - 0xa5, + 0xac, 0x01, 0x00, 0x00, - 0xa7, + 0xae, 0x01, 0x00, 0x00, @@ -8982,7 +9310,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xa9, + 0xb0, 0x01, 0x00, 0x00, @@ -8990,7 +9318,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xa8, + 0xaf, 0x01, 0x00, 0x00, @@ -8998,11 +9326,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x03, 0x00, - 0xa2, + 0xa9, 0x01, 0x00, 0x00, - 0xa9, + 0xb0, 0x01, 0x00, 0x00, @@ -9014,11 +9342,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xaa, + 0xb1, 0x01, 0x00, 0x00, - 0xa2, + 0xa9, 0x01, 0x00, 0x00, @@ -9030,7 +9358,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xab, + 0xb2, 0x01, 0x00, 0x00, @@ -9042,7 +9370,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xaa, + 0xb1, 0x01, 0x00, 0x00, @@ -9062,7 +9390,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xac, + 0xb3, 0x01, 0x00, 0x00, @@ -9078,15 +9406,15 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xad, + 0xb4, 0x01, 0x00, 0x00, - 0xac, + 0xb3, 0x01, 0x00, 0x00, - 0xab, + 0xb2, 0x01, 0x00, 0x00, @@ -9098,7 +9426,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x01, 0x00, 0x00, - 0xad, + 0xb4, 0x01, 0x00, 0x00, @@ -9110,7 +9438,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xaf, + 0xb6, 0x01, 0x00, 0x00, @@ -9118,7 +9446,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xae, + 0xb5, 0x01, 0x00, 0x00, @@ -9130,11 +9458,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xb0, + 0xb7, 0x01, 0x00, 0x00, - 0xaf, + 0xb6, 0x01, 0x00, 0x00, @@ -9146,11 +9474,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xb1, + 0xb8, 0x01, 0x00, 0x00, - 0xb0, + 0xb7, 0x01, 0x00, 0x00, @@ -9162,7 +9490,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x03, 0x00, - 0xb3, + 0xba, 0x01, 0x00, 0x00, @@ -9174,15 +9502,15 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x04, 0x00, - 0xb1, + 0xb8, 0x01, 0x00, 0x00, - 0xb2, + 0xb9, 0x01, 0x00, 0x00, - 0xb3, + 0xba, 0x01, 0x00, 0x00, @@ -9190,7 +9518,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x02, 0x00, - 0xb2, + 0xb9, 0x01, 0x00, 0x00, @@ -9198,15 +9526,15 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x05, 0x00, - 0xb7, + 0xbe, 0x01, 0x00, 0x00, - 0xb8, + 0xbf, 0x01, 0x00, 0x00, - 0xb6, + 0xbd, 0x01, 0x00, 0x00, @@ -9222,11 +9550,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xb9, + 0xc0, 0x01, 0x00, 0x00, - 0xb8, + 0xbf, 0x01, 0x00, 0x00, @@ -9238,15 +9566,15 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xbb, + 0xc2, 0x01, 0x00, 0x00, - 0xb9, + 0xc0, 0x01, 0x00, 0x00, - 0xba, + 0xc1, 0x01, 0x00, 0x00, @@ -9258,7 +9586,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xbc, + 0xc3, 0x01, 0x00, 0x00, @@ -9270,19 +9598,19 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, + 0xc2, + 0x01, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, 0xbb, 0x01, 0x00, 0x00, - 0x3e, - 0x00, - 0x03, - 0x00, - 0xb4, - 0x01, - 0x00, - 0x00, - 0xbc, + 0xc3, 0x01, 0x00, 0x00, @@ -9290,11 +9618,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x03, 0x00, - 0xbd, + 0xc4, 0x01, 0x00, 0x00, - 0xbf, + 0xc6, 0x01, 0x00, 0x00, @@ -9306,11 +9634,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xc0, + 0xc7, 0x01, 0x00, 0x00, - 0xb4, + 0xbb, 0x01, 0x00, 0x00, @@ -9322,23 +9650,23 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, + 0xc8, + 0x01, + 0x00, + 0x00, + 0xc7, + 0x01, + 0x00, + 0x00, 0xc1, 0x01, 0x00, 0x00, - 0xc0, - 0x01, - 0x00, - 0x00, - 0xba, - 0x01, - 0x00, - 0x00, 0xf7, 0x00, 0x03, 0x00, - 0xc3, + 0xca, 0x01, 0x00, 0x00, @@ -9350,15 +9678,15 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x04, 0x00, - 0xc1, + 0xc8, 0x01, 0x00, 0x00, - 0xc2, + 0xc9, 0x01, 0x00, 0x00, - 0xc5, + 0xcc, 0x01, 0x00, 0x00, @@ -9366,7 +9694,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x02, 0x00, - 0xc2, + 0xc9, 0x01, 0x00, 0x00, @@ -9378,11 +9706,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xc4, + 0xcb, 0x01, 0x00, 0x00, - 0xbd, + 0xc4, 0x01, 0x00, 0x00, @@ -9394,7 +9722,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x03, 0x00, - 0xc4, + 0xcb, 0x01, 0x00, 0x00, @@ -9406,7 +9734,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x02, 0x00, - 0xc3, + 0xca, 0x01, 0x00, 0x00, @@ -9414,7 +9742,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x02, 0x00, - 0xc5, + 0xcc, 0x01, 0x00, 0x00, @@ -9426,11 +9754,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xc6, + 0xcd, 0x01, 0x00, 0x00, - 0xb4, + 0xbb, 0x01, 0x00, 0x00, @@ -9442,15 +9770,15 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xc8, + 0xcf, 0x01, 0x00, 0x00, - 0xc6, + 0xcd, 0x01, 0x00, 0x00, - 0xc7, + 0xce, 0x01, 0x00, 0x00, @@ -9458,7 +9786,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x03, 0x00, - 0xca, + 0xd1, 0x01, 0x00, 0x00, @@ -9470,15 +9798,15 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x04, 0x00, - 0xc8, + 0xcf, 0x01, 0x00, 0x00, - 0xc9, + 0xd0, 0x01, 0x00, 0x00, - 0xcc, + 0xd3, 0x01, 0x00, 0x00, @@ -9486,7 +9814,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x02, 0x00, - 0xc9, + 0xd0, 0x01, 0x00, 0x00, @@ -9498,11 +9826,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xcb, + 0xd2, 0x01, 0x00, 0x00, - 0xbd, + 0xc4, 0x01, 0x00, 0x00, @@ -9514,7 +9842,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x03, 0x00, - 0xcb, + 0xd2, 0x01, 0x00, 0x00, @@ -9526,7 +9854,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x02, 0x00, - 0xca, + 0xd1, 0x01, 0x00, 0x00, @@ -9534,7 +9862,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x02, 0x00, - 0xcc, + 0xd3, 0x01, 0x00, 0x00, @@ -9546,11 +9874,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xcd, + 0xd4, 0x01, 0x00, 0x00, - 0xbd, + 0xc4, 0x01, 0x00, 0x00, @@ -9562,7 +9890,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x03, 0x00, - 0xcd, + 0xd4, 0x01, 0x00, 0x00, @@ -9574,7 +9902,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x02, 0x00, - 0xca, + 0xd1, 0x01, 0x00, 0x00, @@ -9582,7 +9910,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x02, 0x00, - 0xca, + 0xd1, 0x01, 0x00, 0x00, @@ -9590,7 +9918,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x02, 0x00, - 0xc3, + 0xca, 0x01, 0x00, 0x00, @@ -9598,7 +9926,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x02, 0x00, - 0xc3, + 0xca, 0x01, 0x00, 0x00, @@ -9610,7 +9938,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xce, + 0xd5, 0x01, 0x00, 0x00, @@ -9626,7 +9954,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xcf, + 0xd6, 0x01, 0x00, 0x00, @@ -9642,11 +9970,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xd0, + 0xd7, 0x01, 0x00, 0x00, - 0xbd, + 0xc4, 0x01, 0x00, 0x00, @@ -9658,15 +9986,15 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xd1, + 0xd8, 0x01, 0x00, 0x00, - 0xcf, + 0xd6, 0x01, 0x00, 0x00, - 0xd0, + 0xd7, 0x01, 0x00, 0x00, @@ -9678,7 +10006,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xd2, + 0xd9, 0x01, 0x00, 0x00, @@ -9686,7 +10014,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xae, + 0xb5, 0x01, 0x00, 0x00, @@ -9698,11 +10026,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xd3, + 0xda, 0x01, 0x00, 0x00, - 0xd2, + 0xd9, 0x01, 0x00, 0x00, @@ -9714,19 +10042,19 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xd4, + 0xdb, 0x01, 0x00, 0x00, - 0xd3, + 0xda, 0x01, 0x00, 0x00, - 0xd3, + 0xda, 0x01, 0x00, 0x00, - 0xd3, + 0xda, 0x01, 0x00, 0x00, @@ -9738,7 +10066,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xd5, + 0xdc, 0x01, 0x00, 0x00, @@ -9750,15 +10078,15 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xce, + 0xd5, 0x01, 0x00, 0x00, - 0xd1, + 0xd8, 0x01, 0x00, 0x00, - 0xd4, + 0xdb, 0x01, 0x00, 0x00, @@ -9770,7 +10098,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x01, 0x00, 0x00, - 0xd5, + 0xdc, 0x01, 0x00, 0x00, @@ -9778,7 +10106,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x02, 0x00, - 0xb3, + 0xba, 0x01, 0x00, 0x00, @@ -9786,7 +10114,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x02, 0x00, - 0xb3, + 0xba, 0x01, 0x00, 0x00, @@ -9798,7 +10126,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xd7, + 0xde, 0x01, 0x00, 0x00, @@ -9806,7 +10134,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xd6, + 0xdd, 0x01, 0x00, 0x00, @@ -9818,11 +10146,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xd8, + 0xdf, 0x01, 0x00, 0x00, - 0xd7, + 0xde, 0x01, 0x00, 0x00, @@ -9834,11 +10162,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xd9, + 0xe0, 0x01, 0x00, 0x00, - 0xd8, + 0xdf, 0x01, 0x00, 0x00, @@ -9850,7 +10178,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x03, 0x00, - 0xdb, + 0xe2, 0x01, 0x00, 0x00, @@ -9862,15 +10190,15 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x04, 0x00, - 0xd9, + 0xe0, 0x01, 0x00, 0x00, - 0xda, + 0xe1, 0x01, 0x00, 0x00, - 0xdb, + 0xe2, 0x01, 0x00, 0x00, @@ -9878,142 +10206,10 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x02, 0x00, - 0xda, - 0x01, - 0x00, - 0x00, - 0x41, - 0x00, - 0x05, - 0x00, - 0x74, - 0x00, - 0x00, - 0x00, - 0xdd, - 0x01, - 0x00, - 0x00, - 0x71, - 0x00, - 0x00, - 0x00, - 0x28, - 0x01, - 0x00, - 0x00, - 0x3d, - 0x00, - 0x04, - 0x00, - 0x06, - 0x00, - 0x00, - 0x00, - 0xde, - 0x01, - 0x00, - 0x00, - 0xdd, - 0x01, - 0x00, - 0x00, - 0x85, - 0x00, - 0x05, - 0x00, - 0x06, - 0x00, - 0x00, - 0x00, - 0xe0, - 0x01, - 0x00, - 0x00, - 0xde, - 0x01, - 0x00, - 0x00, - 0xdf, - 0x01, - 0x00, - 0x00, - 0x0c, - 0x00, - 0x06, - 0x00, - 0x06, - 0x00, - 0x00, - 0x00, 0xe1, 0x01, 0x00, 0x00, - 0x01, - 0x00, - 0x00, - 0x00, - 0x0d, - 0x00, - 0x00, - 0x00, - 0xe0, - 0x01, - 0x00, - 0x00, - 0x85, - 0x00, - 0x05, - 0x00, - 0x06, - 0x00, - 0x00, - 0x00, - 0xe2, - 0x01, - 0x00, - 0x00, - 0xe1, - 0x01, - 0x00, - 0x00, - 0x2c, - 0x00, - 0x00, - 0x00, - 0x81, - 0x00, - 0x05, - 0x00, - 0x06, - 0x00, - 0x00, - 0x00, - 0xe3, - 0x01, - 0x00, - 0x00, - 0xe2, - 0x01, - 0x00, - 0x00, - 0x2c, - 0x00, - 0x00, - 0x00, - 0x3e, - 0x00, - 0x03, - 0x00, - 0xdc, - 0x01, - 0x00, - 0x00, - 0xe3, - 0x01, - 0x00, - 0x00, 0x41, 0x00, 0x05, @@ -10030,7 +10226,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xd6, + 0x28, 0x01, 0x00, 0x00, @@ -10070,9 +10266,9 @@ static const uint8_t kpostfx_frag_spv[] = { 0x01, 0x00, 0x00, - 0x3d, + 0x0c, 0x00, - 0x04, + 0x06, 0x00, 0x06, 0x00, @@ -10082,7 +10278,15 @@ static const uint8_t kpostfx_frag_spv[] = { 0x01, 0x00, 0x00, - 0xdc, + 0x01, + 0x00, + 0x00, + 0x00, + 0x0d, + 0x00, + 0x00, + 0x00, + 0xe7, 0x01, 0x00, 0x00, @@ -10098,15 +10302,15 @@ static const uint8_t kpostfx_frag_spv[] = { 0x01, 0x00, 0x00, - 0xe7, - 0x01, - 0x00, - 0x00, 0xe8, 0x01, 0x00, 0x00, - 0x83, + 0x2c, + 0x00, + 0x00, + 0x00, + 0x81, 0x00, 0x05, 0x00, @@ -10118,11 +10322,135 @@ static const uint8_t kpostfx_frag_spv[] = { 0x01, 0x00, 0x00, + 0xe9, + 0x01, + 0x00, + 0x00, + 0x2c, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0xe3, + 0x01, + 0x00, + 0x00, + 0xea, + 0x01, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x74, + 0x00, + 0x00, + 0x00, + 0xeb, + 0x01, + 0x00, + 0x00, + 0x71, + 0x00, + 0x00, + 0x00, + 0xdd, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xec, + 0x01, + 0x00, + 0x00, + 0xeb, + 0x01, + 0x00, + 0x00, + 0x85, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xee, + 0x01, + 0x00, + 0x00, + 0xec, + 0x01, + 0x00, + 0x00, + 0xed, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xef, + 0x01, + 0x00, + 0x00, + 0xe3, + 0x01, + 0x00, + 0x00, + 0x85, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xf0, + 0x01, + 0x00, + 0x00, + 0xee, + 0x01, + 0x00, + 0x00, + 0xef, + 0x01, + 0x00, + 0x00, + 0x83, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xf1, + 0x01, + 0x00, + 0x00, 0x63, 0x00, 0x00, 0x00, - 0xe9, + 0xf0, 0x01, 0x00, 0x00, @@ -10134,7 +10462,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xeb, + 0xf2, 0x01, 0x00, 0x00, @@ -10150,15 +10478,15 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xec, + 0xf3, 0x01, 0x00, 0x00, - 0xeb, + 0xf2, 0x01, 0x00, 0x00, - 0xea, + 0xf1, 0x01, 0x00, 0x00, @@ -10170,7 +10498,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x01, 0x00, 0x00, - 0xec, + 0xf3, 0x01, 0x00, 0x00, @@ -10178,7 +10506,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x02, 0x00, - 0xdb, + 0xe2, 0x01, 0x00, 0x00, @@ -10186,7 +10514,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x02, 0x00, - 0xdb, + 0xe2, 0x01, 0x00, 0x00, @@ -10198,7 +10526,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xed, + 0xf4, 0x01, 0x00, 0x00, @@ -10214,11 +10542,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xee, + 0xf5, 0x01, 0x00, 0x00, - 0xed, + 0xf4, 0x01, 0x00, 0x00, @@ -10234,11 +10562,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xef, + 0xf6, 0x01, 0x00, 0x00, - 0xed, + 0xf4, 0x01, 0x00, 0x00, @@ -10254,11 +10582,11 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xf0, + 0xf7, 0x01, 0x00, 0x00, - 0xed, + 0xf4, 0x01, 0x00, 0x00, @@ -10274,19 +10602,19 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xf1, + 0xf8, 0x01, 0x00, 0x00, - 0xee, + 0xf5, 0x01, 0x00, 0x00, - 0xef, + 0xf6, 0x01, 0x00, 0x00, - 0xf0, + 0xf7, 0x01, 0x00, 0x00, @@ -10302,7 +10630,7 @@ static const uint8_t kpostfx_frag_spv[] = { 0x00, 0x00, 0x00, - 0xf1, + 0xf8, 0x01, 0x00, 0x00, @@ -11715,4 +12043,4 @@ static const uint8_t kpostfx_frag_spv[] = { 0x01, 0x00, }; -static const size_t kpostfx_frag_spv_size = 11712; +static const size_t kpostfx_frag_spv_size = 12040; diff --git a/source/core/rendering/shader_backend.hpp b/source/core/rendering/shader_backend.hpp index c823885..df1351d 100644 --- a/source/core/rendering/shader_backend.hpp +++ b/source/core/rendering/shader_backend.hpp @@ -25,6 +25,10 @@ namespace Rendering { float curvature{0.0F}; float bleeding{0.0F}; float flicker{0.0F}; + // Forma de les scanlines — 3 subpíxels per fila lògica per defecte. + float scan_dark_ratio{0.333F}; // fracció obscura (1/3) + float scan_dark_floor{0.42F}; // brillantor subfila fosca + float scan_edge_soft{1.0F}; // 0 = step dur; 1 = suavitzat 1 px físic }; // Paràmetres del shader CRT-Pi (algoritme de scanlines amb pesos gaussians). diff --git a/source/game/options.cpp b/source/game/options.cpp index da175d3..bca24c4 100644 --- a/source/game/options.cpp +++ b/source/game/options.cpp @@ -224,6 +224,9 @@ namespace { readField(node, "curvature", preset.curvature); readField(node, "bleeding", preset.bleeding); readField(node, "flicker", preset.flicker); + readField(node, "scan_dark_ratio", preset.scan_dark_ratio); + readField(node, "scan_dark_floor", preset.scan_dark_floor); + readField(node, "scan_edge_soft", preset.scan_edge_soft); } void writePostFXPreset(std::ostringstream& out, const Options::PostFXPreset& preset) { @@ -236,6 +239,9 @@ namespace { out << " curvature: " << preset.curvature << "\n"; out << " bleeding: " << preset.bleeding << "\n"; out << " flicker: " << preset.flicker << "\n"; + out << " scan_dark_ratio: " << preset.scan_dark_ratio << "\n"; + out << " scan_dark_floor: " << preset.scan_dark_floor << "\n"; + out << " scan_edge_soft: " << preset.scan_edge_soft << "\n"; } // Presets per defecte del shader CRT-Pi, portats de projecte_2026. @@ -642,6 +648,9 @@ namespace Options { .curvature = IT->curvature, .bleeding = IT->bleeding, .flicker = IT->flicker, + .scan_dark_ratio = IT->scan_dark_ratio, + .scan_dark_floor = IT->scan_dark_floor, + .scan_edge_soft = IT->scan_edge_soft, }; } diff --git a/source/game/options.hpp b/source/game/options.hpp index b6e9d05..2590a74 100644 --- a/source/game/options.hpp +++ b/source/game/options.hpp @@ -53,6 +53,10 @@ namespace Options { float curvature{0.0F}; float bleeding{0.0F}; float flicker{0.0F}; + // Forma de les scanlines (3 subpíxels per fila lògica per defecte). + float scan_dark_ratio{0.333F}; + float scan_dark_floor{0.42F}; + float scan_edge_soft{1.0F}; }; // Preset del shader CRT-Pi (un per entrada a crtpi.yaml).