Наложение / получить FPS окна

Я не уверен, что это более правильно в stackexchange, но как такие программы, как steam (The game overlay) и FRAPS, накладывают данные на окно? Я заметил, что оверлей/fraps может работать только на windows, которые управляются opengl/directx, или оверлей просто функция int он Windows api? Кроме того, как fraps получает fps окна?

9
задан agz
11.01.2023 2:02 Количество просмотров материала 2582
Распечатать страницу

1 ответ

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

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

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

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

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

или здесь: пример: Fraps

подсчет кадров в секунду прост; программы просто нужно время, прошедшее между кадрами. Например: frame time = 20 мс; FPS = 1000 мс / 20 мс = 50;

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

6
отвечен Ryck 2023-01-12 09:50

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх