Ну, то, что оно обнвляется постоянно, понятно. А высчитать его просто - ведь FPS, по сути, то, сколько раз в секунду выполняется рендеринг в цикле, поэтому просто учитывай реальное время с точность до миллисекунды (можно и до секунды, тогда первая секунда сбрасываетя...). Например, использую функцию Windows API GetTickCount().
На примере вряд ли скажу, т.к. под чистым DirectX уже давно не писал, но примерно так:
Код:
Old = число миллисекунд
FrameNumber = 0
Стартуем цикл
Рендеринг
New = число миллисекунд
if (New - Old > 1000) {
Old = New
FPS = FrameNumber
FrameNumber = 0
}
новый виток цикла