These cannot be implemented with the standard OpenGL blending functions, so we have to do them manually in a shader, which requires a good deal of machinery to create intermediate framebuffers and so forth.