Я думаю, вы могли бы просто использовать стандартное предварительно умноженное альфа-смешение:
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
Если вы хотите заменить, то вы выводите альфа-значение 1 из своего фрагментного шейдера.Если вы хотите добавить аддитив, вы выводите альфа-значение 0 из своего фрагментного шейдера.
Это предполагает, что вы действительно заинтересованы только в значениях RGB, которые попадают в ваш кадровый буфер.