Моя однопоточная игра Opengl с двойной буферизацией работает на двух мониторах, используя одну комбинацию HWND, HDC и HGLRC. Таким образом, каждый буфер кадра имеет размер 2560 x 1024.
Мой компьютер это:
Процессор Intel Core 2 Quad с тактовой частотой 3,00 ГГц
Видеокарта ATI Radeon HD 3400 с тактовой частотой 512 МБ, ЦАП, 400 МГц
Оба монитора настроены на 60 Гц и (1280 x 1024) разрешение.
Я вижу, что моя игра с vsyncing OFF работает на скорости около 36 кадров в секунду. Когда vsyncing включен, игра синхронизируется со скоростью 20 FPS, пока приложение GDI, такое как диспетчер задач, не фокусируется и не рендерится поверх него. Затем мы видим, что частота кадров игры возрастает до 30 кадров в секунду, в то время как менеджер задач находится в фокусе. FRAPS подтверждает мою профилированную частоту кадров как точную.
20FPS — ожидаемая скорость Vsync? Как у меня сложилось впечатление, что действительные значения для 60Гц монитора были 60,30,15,10 …?
Мне также удалось запустить демонстрацию фоновой текстуры для запуска с теми же начальными настройками рендеринга, что и в моей игре, и я вижу 72FPS с отключенным Vsync, а Vsync ON синхронизируется с 30FPS. Что случилось с синхронизацией до 60FPS?
Это почти как если бы я пропускал прерывание или таймер vsync, если нет окна GDI.
К вашему сведению, я использую QueryPerformanceCounter, чтобы получить таймер высокого разрешения для выполнения всех вычислений FPS.
Задача ещё не решена.
Других решений пока нет …