Просто для пояснения: вы хотите, чтобы фрагменты с альфа = 0.0 не записывались ни в буфер цвета, ни в буфер глубины?Кроме того, я предполагаю, что вы в настоящее время используете смешивание для маскировки прозрачных пикселей, потому что в противном случае это не должно быть проблемой.
В этом случае вы можете просто использовать сбросить фрагмент в вашем фрагменте:
if( color.a<=0.0 ){
discard;
}
Это гарантирует, что все фрагменты, для которых условие истинно, не будут отображаться вообще (вместо того, чтобы смешиваться с нулевым коэффициентом в кадровом буфере).
Если да (по любой причине)программируя фиксированный конвейер, вы можете использовать альфа-тест, чтобы получить то же поведение (лично я бы посоветовал перейти на путь, совместимый с прямой (то есть шейдерный), но это не имеет значения).
glEnable(GL_ALPHA_TEST);
glAlphaFunc(GL_GREATER,0.0f);
В качестве дополнительного бонусатак как эти методы убивают фрагмент вместо того, чтобы сделать его невидимым, он может быть быстрее, чем смешивание (хотя я не рассматривал это в последнее время, так что это может быть, но, как правило, это не должно быть медленнее, так что это все еще плюс)