CNA-GAP-025: DIRECT2D refuses additive blending (SourceAlpha/One and One/One) and other asymmetric or non-Add blend states, and reports AdditiveBlending false
Evidence basis: source-verified at the pinned commit; tests exist (not executed for this page). Claims on this page were checked by reading the CNA source at commit 009d40f5; unless a sentence says otherwise, nothing here was built or executed. Nothing on this page was executed unless the Evidence section says so.
BlendStateToDirect2DBlendMode throws NotSupportedException for BlendState::Additive and One/One and std::runtime_error for asymmetric or non-Add combinations, because Direct2D's composite modes have no matching operation.
- Identifier
CNA-GAP-025- Category
- Functional gap
- Subsystem
- Graphics & renderers
- Status
- Open
- Verified against
- CNA
009d40f5(009d40f5dd085c4e674d3479675fac84b12b3e0a) - Evidence basis
- Source-verified: read at TARGET, not executed
- Tests touching this area
- Yes: see Current tests
- Affected contract
- SpriteBatch.Begin(..., BlendState::Additive or custom BlendState, ...) on DIRECT2D
Expected behaviour
XNA SpriteBatch supports BlendState.Additive and arbitrary blend states; particle and glow effects commonly use additive blending.
Actual behaviour at TARGET
Direct2DRenderer.cpp's BlendStateToDirect2DBlendMode throws NotSupportedException ("Direct2D rejects additive SourceAlpha/One and One/One blend states: its PLUS ...") and std::runtime_error for asymmetric or non-Add states; SupportsDirect2DCapability answers false for AdditiveBlending.
Source locations
modules/renderers/direct2d/src/Direct2DRenderer.cpp— BlendStateToDirect2DBlendMode and the AdditiveBlending capability answer
Evidence
Checked by reading the named sources at 009d40f5; nothing was built or executed for this entry.
Focused reproduction
No focused reproduction is known. Nothing has been invented here; the evidence above is what exists.
Current tests
Direct2D's device-free blend tests pin the refusals.
Regression test
None beyond the existing refusal tests unless additive support is added.
Blast radius
2D games with additive particles or glows on DIRECT2D; the exception type differs between the additive and the other refused states.
Workaround
Check GraphicsCapability::AdditiveBlending and fall back to AlphaBlend or pre-blended sprites.
Related pages
The same subject is explained at several altitudes. These are the neighbouring pages at each one.
- Deep dives
- Windows 2D renderers: Direct2D blending
- Known issues
- Functional gap index