Как посчитать FPS в OpenGL
Собственно, сабж. Пробовал через WM_CAP_GET_SEQUENCE_SETUP, но получается какая-то ерунда.
А что, собственно, мешает считать напрямую, например, через GetTickCount или HPT?
То есть перед началом рисования и после засечь время, вычесть и поделить?
Верно. Обычно рисование происходит в цикле. Засекай время и считай, сколько циклов рисования прошло за минуту. Если GetTickCount не хватит, можно использовать мультимедийные таймеры (тема поднималась неоднократно).
Далее: в силу ряда причин величины, получаемые от кадра к кадру, обычно дают весьма большую погрешность, поэтому в файл протокола, конечно, можно складывать, как есть, а на экран лучше выводить сглаженную величину, примерно так:
MyFPS := MyFPS*(1.0-eps) + NewFPS*eps;
где NewFPS - новая вычисленная велична, а MyFPS - то, что будет выводиться на экран.
eps - де-то в районе 0.01-0.1.
Стоп, стоп, стоп.. Вот насчет ряда причин, по которым возникают погрешности можно подробнее? Про сглаженную величину - согласен. Иначе будут цифры скакать - ничего не разглядишь.
Цитата: makbeth
Стоп, стоп, стоп.. Вот насчет ряда причин, по которым возникают погрешности можно подробнее?
Поподробнее - долго рассказывать. Задавай конкретные вопросы.
Собсно вот...
1. Погрешности определения времени - здесь, опять же, можно выделить несколько причин.
2. Прерывания ОС.
3. Асинхронная работа нескольких устройств, в частности, CPU, GPU и графического контроллера (GPU обрабатывает данные, используя видеопамять, а графический контроллер читает из экранной области видеопамяти и посылает данные на RAMDAC).
4. Какие-либо процессы на фоне.
Что касается определения времени, то думаю, там погрешности можно не учитывать - слишком они малы :)
Цитата: makbeth
Что ж.. я, в принципе согласен. Только вот обычно FPS, скажем в играх, бенчах и т.д. меряют с учетом производительности всей системы, включая фоновые процессы, прерывания. Думаю, никому не будет интересен "чистый" FPS.
Правильно. Но все эти эффекты будут вести к довольно существенному разбросу показаний от измерения к измерению. Таким образом, наша задача состоит не в том, чтобы исключить влияние на FPS посторонних факторов, а в том, чтобы учесть и усреднить по времени.
Цитата:
Что касается определения времени, то думаю, там погрешности можно не учитывать - слишком они малы :)
Ну, если погрешностью в 50-500% можно пренебречь, - тогда флаг в руки! :)
andriano, как то ты странно fps меряешь :)
Цитата: makbeth
andriano, как то ты странно fps меряешь :)
Честно говоря, никогда раньше не общался с телепатами.
И о том, как я лично меряю FPS, также не писал.
Но факт остается фактом: результаты получаются вполне вменяемые. Хотя кому-то это и может показаться странным.