Use glBlend to replace needing FBO for tool outline
The previous behaivour requires rendering the canvas with an FBO, then uses its texture as an input to a fragment shader to blend the tool outline. The arithmentic:
outColor = srcColor * vec4(vec3(1.0 - dstColor), 1.0)
... is equivalent to:
outColor = srcColor * 1.0 - srcColor * dstColor
... except for the alpha channel, which is effectively 1.0.
This can be replicated by GL_BLEND using glBlendFuncSeparate and
glBlendEquationSeparate. This avoids needing to sample from the FBO
texture. It also works on OpenGL 2.1, so we can remove the old
glLogicOp(GL_XOR)
codepath to get the same behaviour across all
supported systems.
This replaces the shader added in !349 (merged). In theory this reduces the graphics memory footprint and may be a bit more performant. GL_BLEND is less flexible than a fragment shader (other than being able to sample the destination), but I don't think we need to make the tool outline any fancier.
I believe it should work fine on OpenGL 2.1 according to the docs, but I have not tested it on such hardware.
I have not completely removed the FBO rendering code because we may still use it in the future to avoid redrawing the full canvas image when updating just the tool outline and assistants.