44// Blend Modes (https://web.dev/learn/css/blend-modes/)
55// I only filled in what I needed. A job for someone else - garry
66//
7- DynamicCombo ( D_BLENDMODE, 0 ..2 , Sys ( ALL ) );
7+ DynamicCombo ( D_BLENDMODE, 0 ..3 , Sys ( ALL ) );
88
9- // Alpha Blend
9+ // Alpha Blend (standard)
1010#if D_BLENDMODE == 0
1111 RenderState ( BlendEnable, true );
1212 RenderState ( SrcBlend, SRC_ALPHA );
@@ -15,18 +15,34 @@ DynamicCombo( D_BLENDMODE, 0..2, Sys( ALL ) );
1515 RenderState ( SrcBlendAlpha, ONE );
1616 RenderState ( DstBlendAlpha, INV_SRC_ALPHA );
1717 RenderState ( BlendOpAlpha, ADD );
18+
1819// Multiply
1920#elif D_BLENDMODE == 1
2021 RenderState ( BlendEnable, true );
2122 RenderState ( SrcBlend, DEST_COLOR );
22- RenderState ( DstBlend, INV_SRC_ALPHA );
23+ RenderState ( DstBlend, ZERO );
24+ RenderState ( BlendOp, ADD );
2325 RenderState ( SrcBlendAlpha, ONE );
24- RenderState ( DstBlendAlpha, ONE );
25- // Lighten
26+ RenderState ( DstBlendAlpha, ZERO );
27+ RenderState ( BlendOpAlpha, ADD );
28+
29+ // Lighten / Additive
2630#elif D_BLENDMODE == 2
2731 RenderState ( BlendEnable, true );
2832 RenderState ( SrcBlend, SRC_ALPHA );
2933 RenderState ( DstBlend, ONE );
34+ RenderState ( BlendOp, ADD );
3035 RenderState ( SrcBlendAlpha, ONE );
3136 RenderState ( DstBlendAlpha, ONE );
32- #endif
37+ RenderState ( BlendOpAlpha, ADD );
38+
39+ // Premultiplied Alpha
40+ #elif D_BLENDMODE == 3
41+ RenderState ( BlendEnable, true );
42+ RenderState ( SrcBlend, ONE );
43+ RenderState ( DstBlend, INV_SRC_ALPHA );
44+ RenderState ( BlendOp, ADD );
45+ RenderState ( SrcBlendAlpha, ONE );
46+ RenderState ( DstBlendAlpha, INV_SRC_ALPHA );
47+ RenderState ( BlendOpAlpha, ADD );
48+ #endif
0 commit comments