창의 오버레이/FPS 가져오기

창의 오버레이/FPS 가져오기

이것이 stackexchange에서 더 적절한지는 잘 모르겠지만 Steam(게임 오버레이) 및 FRAPS 오버레이 데이터를 창 위에 어떻게 오버레이합니까? 오버레이/프랩은 OpenGL/DirectX에 의해 구동되는 창에서만 작동할 수 있다는 것을 알았습니다. 아니면 오버레이는 단지 Windows API의 기능입니까? 또한, fraps는 어떻게 창의 fps를 얻나요?

답변1

FRAPS 및 유사한 프로그램은 렌더링된 프레임을 표시하는 데 사용되는 API 호출을 연결하여 작동합니다(예:IDirect3DDevice9::현재메소드 또는 OpenGL스왑버퍼())

기본적으로 게임이 새 프레임을 표시하려고 하면 프로그램 실행이 FRAPS에 의해 설치된 후크로 전송됩니다. 해당 코드는 프레임 위에 FPS 카운터를 그리거나 색상을 변경하거나 비디오 녹화를 위한 스크린샷을 찍는 등 원하는 방식으로 프레임을 수정할 수 있습니다. 완료되면 FRAPS는 원래 API를 호출하여 프레임을 표시합니다.

다양한 그래픽 API에는 다양한 후크가 필요하므로 FRAPS에는 OpenGL 및 Direct3D 8/9/10 등에 대한 별도의 구현이 있어야 합니다. 이는 또한 새로운 기술(예: Direct2D)이 출시되면 FRAPS에서 이를 처리하기 위한 업데이트가 필요함을 의미합니다.

후크를 설치하고 제거하는 실제 과정은 다소 복잡합니다. 이 StackOverflow 질문에서 자세한 정보를 찾을 수 있습니다.

주입된 DLL에서 DirectX EndScene 후킹

아니면 여기:사례 연구: Fraps

FPS를 계산하는 것은 간단합니다. 프로그램에는 프레임 사이에 경과된 시간만 필요합니다. 예: 프레임 시간 = 20ms; FPS = 1000ms / 20ms = 50;

프레임 시간이 많이 변하면 FPS 값이 크게 변동합니다. 더 나은 방법은 마지막 10프레임의 평균을 계산하거나 마지막 1초 동안 그려진 프레임 수를 계산하는 것입니다. FRAPS의 숫자는 너무 빨리 변하는 것 같습니다.

관련 정보