OpenGL оконные системы предотвращения разрыва экрана

В моем приложении OpenGL я хочу предотвратить разрыв экрана по очевидным причинам. До сих пор я использовал vsync. Но я хотел бы заменить его на перестановку буфера для переворачивания страницы (изменение указателя на данные монитора вместо изменения значения) для повышения производительности. У меня такой вопрос: поддерживают ли важные оконные системы (Windows, Cocoa, X11) этот вид обмена буфера и требует ли он явного запроса или это поведение по умолчанию?

1 ответ

Решение

V-Sync - это "вертикальная синхронизация с возвратом". Если V-Sync включен, это означает, что двойные буферы обмениваются в тот промежуток времени, когда дисплей не рисует. Это термин, унаследованный от времени ЭЛТ-дисплеев, где электронный луч использовался для рисования изображения линия за линией сверху вниз слева вниз. Когда луч достиг нижнего правого угла, его пришлось вернуть в верхний правый угол. Электронный пучок управлялся с помощью двух пар электромагнитных катушек и (в отличие от электростатических дефлекторов в осциллографах) не может работать за пределами определенной скорости нарастания. Это V-Sync

Сегодня дисплеи получают данные по-прежнему построчно во внутренний буфер дисплея. В конце всего кадра вставлена ​​небольшая пауза.

Таким образом, "вертикальный откат" - это тот промежуток времени, когда вы можете обновить данные в вашем буфере отображения, не мешая процессу рисования.

До сих пор я использовал vsync.

Нет, вы не использовали vsync. Вы используете двойную буферизацию, обмен которой синхронизируется с помощью V-Sync.

Но я хотел бы заменить его на перестановку буфера для перелистывания страниц

Это не ваше решение. Какой метод используется, выбирается графическим оборудованием и его драйвером. Ваша программа живет в пространстве пользователя и даже не может говорить об этом на низком уровне с оборудованием. И обычно метод, который работает лучше всего в данной ситуации.

Другие вопросы по тегам