Skip to content

Commit a9fdee1

Browse files
committed
blam: Fixed holo control rendering
Managed to find out WTH Bungie meant by "blend current with alpha"
1 parent 58ae1f6 commit a9fdee1

3 files changed

Lines changed: 22 additions & 31 deletions

File tree

.cmake/CMakePresets.linux.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,8 @@
8383
"CMAKE_C_FLAGS": "-march=native",
8484
"CMAKE_CXX_FLAGS": "-march=native",
8585
"CMAKE_MAKE_PROGRAM": "$env{NINJA}",
86-
"MKSQUASH_PROGRAM": "$env{MKSQUASH_PROGRAM}"
86+
"MKSQUASH_PROGRAM": "$env{MKSQUASH_PROGRAM}",
87+
"VCPKG_OVERLAY_PORTS": "${sourceDir}/toolchain/vcpkg/ports/sdl2"
8788
},
8889
"environment": {
8990
"MKSQUASH_PROGRAM": "/usr/bin/mksquash",

.github/tests/dummy_plug_b30.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,9 @@
3737
{"time":11000, "type": "camera", "position" :[36.33729, 20.256166, 10.303616], "rotation":[-0.010582445, 0.0028715574, 0.96503454, -0.2618936]},
3838
{"time":12000, "type":"screenshot","name":"b30_security"},
3939
{"time":13000, "type": "camera", "position" :[8.345126, -11.849968, -14.505378], "rotation":[-0.9495733, 0.1289765, 0.28318948, -0.03846506]},
40-
{"time":14000, "type":"screenshot","name":"b30_cartographer"}
40+
{"time":14000, "type":"screenshot","name":"b30_cartographer"},
41+
{"time":15000, "type": "camera", "position" :[-58.11081, 6.493973, 4.239501], "rotation":[-0.25236937, -0.02023266, 0.9643253, 0.07731121]},
42+
{"time":16000, "type":"screenshot","name":"b30_covenant_shield"}
4143
],
4244
"frame_delta": 200.0,
4345
"end_time": 50000

examples/blam/cblam-testing/graphics_data/shaders/fragments/shaders_common_uber.glsl

Lines changed: 17 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -340,7 +340,7 @@ const uint F_BLEND_CURRENT_ALPHA_INVERSE = 10u;
340340
const uint F_BLEND_NEXT_ALPHA = 11u;
341341
const uint F_BLEND_NEXT_ALPHA_INVERSE = 12u;
342342

343-
void chicago_stage(out vec4 dst, in vec4 i1, in vec4 i2, in uint flags)
343+
void chicago_stage(out vec4 dst, in vec4 i1, in vec4 last, in vec4 i2, in uint flags)
344344
{
345345
uint cf = flags & 0xFu;
346346
uint af = (flags >> 4) & 0xFu;
@@ -353,61 +353,49 @@ void chicago_stage(out vec4 dst, in vec4 i1, in vec4 i2, in uint flags)
353353
dst.rgb = i1.rgb * i2.rgb;
354354
else if(cf == F_DOUBLE_MUL)
355355
dst.rgb = clamp(i1.rgb * i2.rgb * i2.rgb, 0.0, 1.0);
356-
else if(cf == F_ADD)
356+
else if(cf == F_ADD || cf == F_ADD_SIGNED_CURRENT || cf == F_ADD_SIGNED_NEXT)
357357
dst.rgb = i1.rgb + i2.rgb;
358-
else if(cf == F_ADD_SIGNED_CURRENT)
359-
dst.rgb = i1.rgb + i2.rgb - 0.5;
360-
else if(cf == F_ADD_SIGNED_NEXT)
361-
dst.rgb = i1.rgb + i2.rgb - 0.5;
362-
else if(cf == F_SUB_SIGNED_CURRENT)
363-
dst.rgb = i1.rgb - i2.rgb;
364-
else if(cf == F_SUB_SIGNED_NEXT)
358+
else if(cf == F_SUB_SIGNED_CURRENT || cf == F_SUB_SIGNED_NEXT)
365359
dst.rgb = i1.rgb - i2.rgb;
366360
else if(cf == F_BLEND_CURRENT_ALPHA)
367-
dst.rgb = mix(i1.rgb, i2.rgb, i1.a);
361+
dst.rgb = i1.rgb + i2.rgb * last.a;
368362
else if(cf == F_BLEND_CURRENT_ALPHA_INVERSE)
369-
dst.rgb = mix(i1.rgb, i2.rgb, 1.0 - i1.a);
363+
dst.rgb = i1.rgb + i2.rgb * (1 - last.a);
370364
else if(cf == F_BLEND_NEXT_ALPHA)
371-
dst.rgb = mix(i1.rgb, i2.rgb, i2.a);
365+
dst.rgb = i1.rgb + i2.rgb * i2.a;
372366
else if(cf == F_BLEND_NEXT_ALPHA_INVERSE)
373-
dst.rgb = mix(i1.rgb, i2.rgb, 1.0 - i2.a);
367+
dst.rgb = i1.rgb + i2.rgb * (1 - i2.a);
374368

375369
if(af == F_CURRENT)
376370
dst.a = i1.a;
377371
else if(af == F_NEXT)
378-
dst.a = i2.a;
372+
dst.a = i1.a;
379373
else if(af == F_MUL)
380374
dst.a = i1.a * i2.a;
381375
else if(af == F_DOUBLE_MUL)
382376
dst.a = clamp(i1.a * i2.a * i2.a, 0.0, 1.0);
383-
else if(af == F_ADD)
377+
else if(af == F_ADD || af == F_ADD_SIGNED_CURRENT || af == F_ADD_SIGNED_NEXT)
384378
dst.a = i1.a + i2.a;
385-
else if(af == F_ADD_SIGNED_CURRENT)
386-
dst.a = i1.a + i2.a - 0.5;
387-
else if(af == F_ADD_SIGNED_NEXT)
388-
dst.a = i1.a + i2.a - 0.5;
389-
else if(af == F_SUB_SIGNED_CURRENT)
390-
dst.a = i1.a - i2.a;
391-
else if(af == F_SUB_SIGNED_NEXT)
379+
else if(af == F_SUB_SIGNED_CURRENT || af == F_SUB_SIGNED_NEXT)
392380
dst.a = i1.a - i2.a;
393381
else if(af == F_BLEND_CURRENT_ALPHA)
394-
dst.a = mix(i1.a, i2.a, i1.a);
382+
dst.a = i1.a * last.a;
395383
else if(af == F_BLEND_CURRENT_ALPHA_INVERSE)
396-
dst.a = mix(i1.a, i2.a, 1.0 - i1.a);
384+
dst.a = i1.a * (1 - last.a);
397385
else if(af == F_BLEND_NEXT_ALPHA)
398-
dst.a = mix(i1.a, i2.a, i2.a);
386+
dst.a = i1.a * i2.a;
399387
else if(af == F_BLEND_NEXT_ALPHA_INVERSE)
400-
dst.a = mix(i1.a, i2.a, 1.0 - i2.a);
388+
dst.a = i1.a * (1 - i2.a);
401389
}
402390

403391
vec4 chicago_blend(vec4 c1, vec4 c2, vec4 c3, vec4 c4, uint flags)
404392
{
405393
vec4 out_color = vec4(1.0);
406-
chicago_stage(out_color, c1, c2, flags & 0xFFu);
394+
chicago_stage(out_color, c1, c1, c2, flags & 0xFFu);
407395
if((uint(mats.instance[frag.instanceId].maps[2].layer) >> 24) != 0u)
408-
chicago_stage(out_color, out_color, c3, (flags >> 8) & 0xFFu);
396+
chicago_stage(out_color, out_color, c2, c3, (flags >> 8) & 0xFFu);
409397
if((uint(mats.instance[frag.instanceId].maps[3].layer) >> 24) != 0u)
410-
chicago_stage(out_color, out_color, c4, (flags >> 16) & 0xFFu);
398+
chicago_stage(out_color, out_color, c3, c4, (flags >> 16) & 0xFFu);
411399
return out_color;
412400
}
413401

0 commit comments

Comments
 (0)