Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.08.2008, 02:32   #1
Minimus
Пользователь
 
Аватар для Minimus
 
Регистрация: 03.08.2008
Сообщений: 43
По умолчанию Можно ли подсчитать FPS в другом процессе?

В общем идея такая - подсчитать частоту обновления экрана (FPS) какой нибудь игры. Но есть маленькая проблемка - я не имею ни малейшего представления как это реализовать. Может кто нибудь делал нечто подобное? Или знает как это можно провернуть?
бороться и искать
найти и перепрятать.

Последний раз редактировалось Minimus; 08.08.2008 в 04:13.
Minimus вне форума Ответить с цитированием
Старый 08.08.2008, 11:35   #2
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,547
По умолчанию

Что-то мне подсказывает, что такое не возможно. FPS может подсчитать только сама программа, т.к. способ подсчета зависит от метода вывода изображения.
Arigato вне форума Ответить с цитированием
Старый 08.08.2008, 16:04   #3
Minimus
Пользователь
 
Аватар для Minimus
 
Регистрация: 03.08.2008
Сообщений: 43
По умолчанию

Да...Короче полная безнадега?
Хотя я и не сомневался, что это невозможно. Ну, точнее говоря, - невозможно прямым путем........
Ну а если перехватывать моменты, когда DDraw переключает видеобуферы? Это можно как-нибудь сделать?
И есть ли смысл в этом подсчете? То есть, в принципе, частота переключения должна быть равна частоте нарисованных кадров?
Вопросы....Вопросы....Одни вопросы!
бороться и искать
найти и перепрятать.

Последний раз редактировалось Minimus; 08.08.2008 в 17:05.
Minimus вне форума Ответить с цитированием
Старый 09.08.2008, 08:26   #4
Minimus
Пользователь
 
Аватар для Minimus
 
Регистрация: 03.08.2008
Сообщений: 43
По умолчанию

В принципе ясно, что задача решается посредством загрузки своей DLL в адресное пространство исследуемого процесса. Ну и затем, к примеру, SendMessage-ми можно производить обмен данными между этой DLL и екзешником моей программы. Здесь вроде бы все ясно.
Неясно только как эта самая DLL может получать эту информацию.
Хм..

Уважаемый Arigato, а не могли бы вы поподробнее обяснить мне фразу
Цитата:
Сообщение от Arigato Посмотреть сообщение
способ подсчета зависит от метода вывода изображения.
(Возможно разгадка где-то рядом).
бороться и искать
найти и перепрятать.

Последний раз редактировалось Minimus; 09.08.2008 в 08:47.
Minimus вне форума Ответить с цитированием
Старый 09.08.2008, 11:36   #5
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,547
По умолчанию

Цитата:
Уважаемый Arigato, а не могли бы вы поподробнее обяснить мне фразу
Подсчет FPS в самой игре зависит от метода формирования изображения.
Например, 2Д игра, где на фоне отрисовываются некие объекты, фон неподвижен. Тут количество FPS - это сколько раз за секунду удается перерисовать все объекты. Но игра может перерисовывать не все объекты каждый раз, а только те, что поменяли свое состояние.
Это пример, что бы понять, что FPS - это количество кадров в секунду, но что такое 1 кадр определяется самой программой, занимающейся отрисовкой.
Не силен в DirectX, возможно, можно перехватывать моменты сброса буфера на экран и это считать 1 кадром. Может что-то аналогичное можно делать и в случае с OpenGL.
Если же используется GDI, то здесь можно пытаться (как, не знаю) так же определять сброс буфера на экран.
Arigato вне форума Ответить с цитированием
Старый 09.08.2008, 17:48   #6
Minimus
Пользователь
 
Аватар для Minimus
 
Регистрация: 03.08.2008
Сообщений: 43
По умолчанию

Спасибо, Arigato.
Цитата:
Сообщение от Arigato Посмотреть сообщение
можно перехватывать моменты сброса буфера на экран и это считать 1 кадром
Блин. В точку!!!
Любая серьезная игра или программа рендеринга сначала должна рисовать в задний буфер. А затем буфера переключаются. Иначе будет сильное мерцание экрана => либо GL либо DX производит переключение буферов по требованию программы.
И подсчитав это количество переключений я найду количество нарисованных кадров.
Следовательно:
GDI - баловство все это. Даже не буду тратить времени.
Для GL нужно просто перехватить функцию wglSwapBuffers и подсчитывать количество ее вызовов.
Задача, можно сказать, тривиальная.

Ну а что делать с DX? С этим, простите за выражение, ком-обьектом?
Если у кого есть идеи - черканите - не стесняйтесь!
бороться и искать
найти и перепрятать.

Последний раз редактировалось Minimus; 09.08.2008 в 18:28.
Minimus вне форума Ответить с цитированием
Старый 22.08.2008, 18:50   #7
LDA
Пользователь
 
Регистрация: 18.01.2008
Сообщений: 16
По умолчанию

Перехват методов COM интерфейсов – 1

Перехват методов COM интерфейсов – 2


Еще на форуме www.wasm.ru обсуждался этот вопрос неоднократно

Последний раз редактировалось LDA; 22.08.2008 в 18:59.
LDA вне форума Ответить с цитированием
Старый 26.08.2008, 02:08   #8
Minimus
Пользователь
 
Аватар для Minimus
 
Регистрация: 03.08.2008
Сообщений: 43
По умолчанию

Огромное спасибо. Будем разбираться.
бороться и искать
найти и перепрятать.
Minimus вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
PageControl. в процессе проектировки формы создать несколько вкладок. GN_ Помощь студентам 7 15.11.2011 20:56
Блокировка функции в процессе ее работы Andr180nag JavaScript, Ajax 2 11.08.2008 18:07
Подсчитать сумму! Deman4eg Microsoft Office Excel 2 02.04.2008 09:16
Можно ли в ListBox шрифт в одном Item сделать жирным, а в другом обычным? Washington Компоненты Delphi 9 28.03.2007 12:43
Как программно нажать клавишу в чужом процессе? Sere0ga Win Api 2 27.03.2007 18:43