I see strange patterns on transparent part, do you draw circle multiple times on one position?
If its true, you need add "mask" that will prevent multiple draws on same pixels.
you need change 2 things:
a) `Transparent::func` change first `int` arg to `const Uint8& mask` and in body add new test:
if(src && mask) {/* old draw code */}
b) every `ShaderDraw<Transparent>` you need add new argument with last drew object, e.g.
ShaderSurface(tmpSurface, screenPosition.x, screenPosition.y)
If this dont fix it, send me last version and I will try fix myself.