Эффект затухания легко делается в фрагментном шейдере.
У вас есть таймер в процессоре. Каждый раз, когда он срабатывает, вы уменьшаете переменную remainingPercent
, означающую, сколько «белого» (в отличие от черного) вы хотите видеть в окне. Пусть это значение будет в диапазоне [0, 1,0].
Каждый раз, когда срабатывает таймер, вы просто связываете VAO и вызываете glDrawXX
, нет необходимости снова заполнять буферы. И вызывайте свопбуферы.
Вы передаете это remainingPercent
значение с помощью glUniform
в шейдер. Последний шаг - это смешивание текущего цвета с полным черным по величине этой униформы. Что-то вроде:
float uniform fadeOut;
in vec4 fragColor;
out vec4 finalColor;
....
finalColor = mix(vec4(0.0), fragColor, fadeOut);