Оверлей / Получить FPS окна

8541
agz

Я не уверен, является ли это более правильным в stackexchange, но как такие программы, как steam (игровое наложение) и FRAPS, накладывают данные на окно? Я заметил, что оверлей / фрапс может работать только на окнах, управляемых opengl / directx, или оверлей - это просто функция в Windows API? Кроме того, как Fraps получает FPS окна?

3

1 ответ на вопрос

6
Ryck

FRAPS и подобные программы работают, перехватывая вызовы API, используемые для отображения визуализированного фрейма (например, метод IDirect3DDevice9 :: Present или OpenGL SwapBuffers () )

По сути, когда игра собирается отобразить новый кадр, выполнение программы переносится на хук, установленный FRAPS. Этот код может изменить кадр так, как он хочет, рисуя счетчик FPS поверх него, меняя цвета или делая снимок экрана для видеозаписи. Когда это закончено, FRAPS вызывает оригинальный API для отображения фрейма.

Разные графические API-интерфейсы требуют разных хуков, поэтому FRAPS должны иметь отдельные реализации для OpenGL и Direct3D 8/9/10 и т. Д. Это также означает, что когда новые технологии (например, Direct2D) будут выпущены, FRAPS потребуются обновления для их обработки.

Фактический процесс установки и удаления крючков довольно запутан; Вы можете найти больше информации в этом вопросе StackOverflow:

Подключение DirectX EndScene из внедренной DLL

или здесь: Пример использования: Fraps

Подсчет FPS прост; программам просто нужно время между кадрами Например: время кадра = 20 мс; FPS = 1000 мс / 20 мс = 50;

Если время кадра сильно варьируется, значение FPS будет сильно колебаться. Лучшим методом будет вычисление среднего значения за последние 10 кадров или подсчет количества кадров, нарисованных за последнюю секунду. Хотя числа в FRAPS, похоже, меняются слишком быстро.

Будет ли это также, как паровой оверлей работает? agz 11 лет назад 0
Да, как правило, каждое программное обеспечение, отображающее наложение на полноэкранные приложения OpenGL или D3D, работает одинаково Ryck 11 лет назад 0