First of all, thank you guys for still putting up with me :smile: I'm still quite new to this whole thing.
@TwistedTwigleg said:
Also, does the texture you are using have an alpha channel? Or are the parts that are supposed to be discarded black? If the latter, you may be able to avoid writing a custom shader.
No alpha channel. This is it:

@Megalomaniak said:
Rather than clamp I think you want to scale your data so that there are no negative values in there. Clamping to remove the see through if the see through is what you are after is probably not the way to go.
Rather than clamping try and add to the value so that there is no negative values. Since they are fireballs(I'm guessing) it should be fine if the values go over 1.0, HDR rendering pipeline and all that.
I did some "shader debugging", if you can call it that. I wanted to know where in the resulting material there are negative values. So I wrote a line like this:
if (screen_fragment.r < 0.0 || screen_fragment.g < 0.0 || screen_fragment.b < 0.0) COLOR.rgb = vec3(0.0,1.0,0.0);
But to my surprise, no green pixels anywhere. I tinkered around a bit and finally got something with this:
if (screen_fragment.a > 1.0) color.rgb = vec3(0.0,1.0,0.0);
Which resulted in green pixels everywhere where the particles and something else from the main scene where overlapping. It seems like additive blending also adds the alpha channels together without clamping them. And then, the mix function does get confused when using something greater 1.0 as interpolation value.