Первый аргумент glBlendFunc()
является источником, второй - целевым фактором. В вашем случае:
sfactor = 1.0;
dfactor = 1.0 - src.alpha;
быть src.alpha = 0.0
, от вашего gl_FragColor
:
sfactor = 1.0;
dfactor = 1.0;
Таким образом, цвет поместить в буфер будет:
buffer = sfactor * src + dfactor * dst;
Подставив ...
buffer = (1.0,0.0,0.0,0.0) + dst;
Итак, ставя его просто, вы добавляете 1 к красному каналу существующего буфера.
Если вы хотите, чтобы сделать вывод полностью прозрачным, обычная функция:
glBlendFunc(GL_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
Тот, который вы написали, как правило, используется для предварительного умноженной альфа в источнике. Но (1, 0, 0, 0), очевидно, не является предварительно умноженным значением альфа!
очень полезно описание, спасибо! – cboe