OpenGL оконные системы предотвращения разрыва экрана
В моем приложении OpenGL я хочу предотвратить разрыв экрана по очевидным причинам. До сих пор я использовал vsync. Но я хотел бы заменить его на перестановку буфера для переворачивания страницы (изменение указателя на данные монитора вместо изменения значения) для повышения производительности. У меня такой вопрос: поддерживают ли важные оконные системы (Windows, Cocoa, X11) этот вид обмена буфера и требует ли он явного запроса или это поведение по умолчанию?
1 ответ
V-Sync - это "вертикальная синхронизация с возвратом". Если V-Sync включен, это означает, что двойные буферы обмениваются в тот промежуток времени, когда дисплей не рисует. Это термин, унаследованный от времени ЭЛТ-дисплеев, где электронный луч использовался для рисования изображения линия за линией сверху вниз слева вниз. Когда луч достиг нижнего правого угла, его пришлось вернуть в верхний правый угол. Электронный пучок управлялся с помощью двух пар электромагнитных катушек и (в отличие от электростатических дефлекторов в осциллографах) не может работать за пределами определенной скорости нарастания. Это V-Sync
Сегодня дисплеи получают данные по-прежнему построчно во внутренний буфер дисплея. В конце всего кадра вставлена небольшая пауза.
Таким образом, "вертикальный откат" - это тот промежуток времени, когда вы можете обновить данные в вашем буфере отображения, не мешая процессу рисования.
До сих пор я использовал vsync.
Нет, вы не использовали vsync. Вы используете двойную буферизацию, обмен которой синхронизируется с помощью V-Sync.
Но я хотел бы заменить его на перестановку буфера для перелистывания страниц
Это не ваше решение. Какой метод используется, выбирается графическим оборудованием и его драйвером. Ваша программа живет в пространстве пользователя и даже не может говорить об этом на низком уровне с оборудованием. И обычно метод, который работает лучше всего в данной ситуации.