Я не уверен, что это более правильно в stackexchange, но как такие программы, как steam (The game overlay) и FRAPS, накладывают данные на окно? Я заметил, что оверлей/fraps может работать только на windows, которые управляются opengl/directx, или оверлей просто функция int он Windows api? Кроме того, как fraps получает fps окна?
Наложение / получить FPS окна
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 меняются слишком быстро.
Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]