Понимание обмена буфера более подробно - PullRequest
1 голос
/ 14 апреля 2020

Это скорее теоретический вопрос. Это то, что я понимаю относительно замены буфера и vsyn c:

I - Когда vsyn c выключен, всякий раз, когда разработчик меняет передний / задний буферы, буфер, из которого GPU читает и отправляет на монитор будет изменен на новый, независимо от того, был ли считан старый буфер (т. е. не требуется vblank).

II - Когда включен vsyn c, буферы не заменяются немедленно они будут изменены только тогда, когда старый буфер будет полностью прочитан (т. е. необходим vblank).

III - Отключение vsyn c может повысить частоту кадров, превышающую частоту обновления монитора sh, но разрыв экрана может появиться при замене буферов при чтении

IV - включение vsyn c предотвращает разрыв, но частота обновления монитора sh ограничивает FPS.

На основе на этом я попытался сделать следующий эксперимент: я отключил vsyn c и каждый кадр я рендерил все пиксели с цветом solid, используя glClearColor + glClear, выбирая новый случайный цвет для Рамка. Я получил ~ 2400FPS в мониторе 60 Гц. Так как каждый кадр я менял местами буферы, и поскольку монитор занимает 1/60 секунды для каждого полноэкранного чертежа, я ожидал, что каждый раз, когда монитор обновлялся, буферы менялись местами примерно ~ 40 раз. Это связано с тем, что в 1/60 с происходит около 40 вызовов с заменой буфера. Так как каждый раз, когда меняются буферы, чистый цвет меняется, я ожидал увидеть действительно грязное изображение с большим количеством разных цветов из-за разрыва. Вместо этого, сделав несколько снимков экрана, я не увидел разрывов ... каждый пиксель имел один и тот же solid цвет.

Может ли кто-нибудь указать неверные предположения, которые у меня были, и почему я вижу такое поведение?

Заранее спасибо!

1 Ответ

0 голосов
/ 14 апреля 2020

Проблема была связана с оконным менеджером. Я мог видеть ожидаемое поведение, когда я бегал в полноэкранном режиме.

...