mirror of
https://github.com/sal063/AC6_recomp
synced 2026-08-22 07:04:31 -04:00
dfd8b92a5b
The D3D12 PipelineBlendFactor enum had no constant-alpha entry, so the Xenos CONSTANT_ALPHA and ONE_MINUS_CONSTANT_ALPHA blend factors (14, 15) were mapped onto the constant-COLOR kBlendFactor / kInvBlendFactor - i.e. D3D12 BLEND_FACTOR / INV_BLEND_FACTOR, which use the blend constant's RGB rather than its alpha. Aircraft ground shadow blends with dst = ONE_MINUS_CONSTANT_ALPHA and aSTANT_ALPHA blend factors collapsing onto blend constant of (0.03, 0.04, 0.04, 0.30): it wants 1 - 0.30 = 0.70 (scale the background down -> darken), but got 1 - (0.03,0.04,0.04) ~= 0.97 (barely scaled) with the white source added on top, so the shadow BRIGHTENED instead of darkening - the "white shadow" bug. Vulkan has the distinct ONE_MINUS_CONSTANT_ALPHA factor and renders it correctly. Add kBlendFactorAlpha / kInvBlendFactorAlpha to the enum, route factors 14/15 to them in both the colour and alpha maps, and map them to D3D12 ALPHA_FACTOR / INV_ALPHA_FACTOR. Verified fixed on both the RTV and ROV render-target paths.