diff --git a/leenkx/blender/lnx/write_data.py b/leenkx/blender/lnx/write_data.py index 773dbee..77148b8 100644 --- a/leenkx/blender/lnx/write_data.py +++ b/leenkx/blender/lnx/write_data.py @@ -616,13 +616,28 @@ def write_compiledglsl(defs, make_variants): f.write('#define GBUF_IDX_2 2\n') idx_emission += 1 idx_refraction += 1 + + # Special case for WebGL with both TAA and SSRefraction + webgl_with_taa_refr = ('_kha_webgl' in wrd.world_defs and + ('_SSRefraction' in wrd.world_defs or '_VoxelRefract' in wrd.world_defs) and + ('_TAA' in wrd.world_defs or '_SMAA' in wrd.world_defs)) + + if webgl_with_taa_refr: + # WebGL needs refraction to come before emission for correct rendering + if '_SSRefraction' in wrd.world_defs or '_VoxelRefract' in wrd.world_defs: + f.write(f'#define GBUF_IDX_REFRACTION {idx_emission}\n') + idx_emission += 1 + + if '_EmissionShaded' in wrd.world_defs: + f.write(f'#define GBUF_IDX_EMISSION {idx_emission}\n') + else: + # Standard order for all other platforms + if '_EmissionShaded' in wrd.world_defs: + f.write(f'#define GBUF_IDX_EMISSION {idx_emission}\n') + idx_refraction += 1 - if '_EmissionShaded' in wrd.world_defs: - f.write(f'#define GBUF_IDX_EMISSION {idx_emission}\n') - idx_refraction += 1 - - if '_SSRefraction' in wrd.world_defs or '_VoxelRefract' in wrd.world_defs: - f.write(f'#define GBUF_IDX_REFRACTION {idx_refraction}\n') + if '_SSRefraction' in wrd.world_defs or '_VoxelRefract' in wrd.world_defs: + f.write(f'#define GBUF_IDX_REFRACTION {idx_refraction}\n') f.write("""#if defined(HLSL) || defined(METAL) #define _InvY