Max blend with Alpha [solved]

For the life of me I can’t seem to find a BlendState for the Max BlendFunction that works as desired with alpha.

Use case screenshot, brush drawing:

The triangles are irrelevant for anything except the positions of where to run the fragment program, every vertex in each triangle has identical vertex data for each vertex containing the start/end, color, and radius of the line the triangle covers. So everything would work even with full-screen quads (wastefully of course).

The problem is since it’s a paint stroke there is no way to keep triangles from twisting about each other so additive blending isn’t suitable (it’s also not desired for a continuous brush stroke to add to itself either). Though I could certainly clean some of it up it’s pointless because there’s no solution to a 180 degree miter.

I can’t seem to find a max blending state that will mix the alpha correctly, all I get is the equivalent of solid stroke (no alpha-fade with distance).

After scouring around Github I’m fairly sure this isn’t possible to do as min/max (at least according to GL_ext_blend_minmax, which likely also applies to DX) is pretty weird.

With the exception of Vaser (which chokes on overlaps & >120deg) all instances of brushes I could find either used a blur-pass for any fall-off (such as Milton) or do the entire stroke + blend in a compute shader.

90% of the ~30 projects I looked into still used nothing but the CPU/brute-force (from Blender and Krita to obscurities like Paint3d) spaced particle splat … which is pretty disappointing.

So closed I call it. OpenCL or sprite-batching it will work.