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