Major Edit
Оказывается, мне стоило больше времени искать, прежде чем спрашивать.Из часто задаваемых вопросов по SDL ...
http://sdl.beuc.net/sdl.wiki/FAQ_Double_Buffering_is_Tearing
Кажется, что это довольно сильно указывает на то, что синхронизация с вертикальным возвратом не поддерживается в приложениях оконного режима SDL.
Но ...
Базовая техника возможна в Windows , и я начинаю думать, что в некотором смысле это делает SDL.Просто пока не совсем уверен.
В Windows, как я уже говорил, синхронизация перелистывания страниц с вертикальной синхронизацией в оконном режиме была возможна вплоть до 16-битных дней с использованием WinG.Оказывается, это не совсем так, но вводит в заблуждение.Я выкопал некоторый старый исходный код, используя WinG, и был таймер, запускающий блики страниц.WinG будет работать с смехотворной скоростью, как меня удивило SDL - операции перелистывания страниц на экране не ждут вертикального отката.
Дальнейшие исследования- когда вы выполняете блиц на экране в WinG, он ставится в очередь на потом и вызов завершается.Блит выполняется при следующем вертикальном возврате, так что, надеюсь, без разрывов.Если вы сделаете дополнительные блики на экране (грязные прямоугольники) до этого восстановления, они будут объединены.Если вы выполняете множество полноэкранных бликов до вертикального восстановления, вы рендерите кадры, которые никогда не отображаются.
Этот переход на экран в WinG, очевидно, аналогичен SDL_UpdateRect.SDL_UpdateRects - это просто оптимизированный способ ручного объединения некоторых грязных прямоугольников (и, возможно, они применяются к одному и тому же кадру).Так что, возможно (на платформах, где возможна вертикальная трассировка) это делается в SDL, аналогично WinG - без ожидания, но и без разрывов.
Что ж, я протестировал использование таймера для запуска обновления кадраи результат (на Windows XP) является неопределенным.Я мог получить очень слабые и случайные разрывы на моем древнем ноутбуке, но это может быть не вина SDL - возможно, что «растр» опережает блиц.Вероятно, это моя вина за использование SDL_Flip вместо прямого вызова SDL_UpdateRect с минимальным грязным прямоугольником - хотя я пытался разорвать в этом случае, чтобы посмотреть, смогу ли я.
Так что я все еще не уверен, но может быть так, что SDL оконного режима так же невосприимчив к разрыву, как и на тех платформах, которые позволяют это.Результаты не так плохи, как я себе представлял, даже на моем древнем ноутбуке.
Но - кто-нибудь может предложить окончательный ответ?