Overlay / Get FPS of window

3

Não tenho certeza se isso é mais adequado em stackexchange, mas como programas como steam (sobreposição de jogos) e FRAPS sobrepõem dados em uma janela? Tenho notado que o overlay / fraps só funciona em janelas que são acionadas pelo opengl / directx, ou o overlay é apenas um recurso da janela do windows? Além disso, como as fraps recebem os fps da janela?

    
por agz 25.01.2013 / 06:01

1 resposta

6

O FRAPS e programas semelhantes funcionam interligando as chamadas de API usadas para exibir o quadro renderizado (por exemplo, Método IDirect3DDevice9 :: Present ou OpenGL SwapBuffers () )

Essencialmente, quando um jogo está prestes a exibir um novo quadro, a execução do programa é transferida para o gancho instalado pelo FRAPS. Esse código pode modificar o quadro da maneira que desejar, desenhando o contador de FPS sobre ele, alterando as cores ou fazendo uma captura de tela para a gravação de vídeo. Quando isso terminar, o FRAPS chama a API original para exibir o quadro.

APIs gráficas diferentes precisam de ganchos diferentes, então o FRAPS deve ter implementações separadas para OpenGL e Direct3D 8/9/10 etc. Também significa que quando novas tecnologias (como o Direct2D) são lançadas, o FRAPS precisa de atualizações para lidar com isso.

O processo atual de instalação e remoção de ganchos é bastante complicado; você pode encontrar mais informações nesta questão do StackOverflow:

Conectando o DirectX EndScene a partir de uma DLL injetada

ou aqui: Estudo de caso: Fraps

A contagem de FPS é simples; os programas precisam apenas do tempo decorrido entre os quadros. Por exemplo: frame time = 20 ms; FPS = 1000 ms / 20 ms = 50;

Se os tempos de frames variarem muito, o valor do FPS variará bastante. Um método melhor seria calcular uma média dos últimos 10 quadros ou contar o número de quadros desenhados ao longo do último segundo. Embora os números no FRAPS pareçam mudar muito rápido.

    
por 25.01.2013 / 11:47