Двойная буферизация и glFinish
- две совершенно разные вещи.
glFinish
блокирует программу, пока все операции рисования не будут завершены.
Двойная буферизация используется, чтобы скрыть процесс рендеринга от пользователя. Без двойной буферизации каждая операция рисования стала бы видимой сразу, предполагая, что частота обновления дисплея бесконечно высока. На практике вы получите некоторые артефакты отображения, такие как части сцены, видимые в одном состоянии, остальные не видны или в каком-то другом состоянии, изображение может быть неполным и т. Д. Двойная буферизация позволяет избежать этого, сначала рендеринг в задний буфер, и только после того, как рендеринг закончен, меняя его обратно передним буфером, который отправляется на устройство отображения.
Теперь сегодня управление окнами композитинга становится преобладающим: Windows имеет Aero, MacOS X Quartz Extreme и, по крайней мере, в Linux Unity, а оболочка GNOME3 использует композитинг, если он доступен. Суть в том, что при компоновке технически создается двойной буфер: Windows обращается к закадровым буферам, и из них создается последний экран. Так что, если вы работаете на машине с композитингом, то двойная буферизация является излишней, если она выполняется в вашей программе, и все, что нужно, это какой-то механизм синхронизации, чтобы сообщить композитору, когда следующий кадр готов. MacOS X имеет это. X11 по-прежнему не хватает правильной схемы синхронизации, см. Этот пост в списке рассылки: http://lists.freedesktop.org/archives/xorg/2004-May/000607.html
TL; DR: двойная буферизация и glFinish
- это разные вещи, и вам нужна двойная буферизация (какого-то рода), чтобы все выглядело хорошо.