Overlay / FPS des Fensters abrufen

8603
agz

Ich bin nicht sicher, ob dies bei StackExchange besser geeignet ist, aber wie werden Daten wie Steam (das Game-Overlay) und FRAPS-Daten über ein Fenster eingeblendet? Ich habe festgestellt, dass das Overlay / Fraps nur auf Fenstern funktionieren kann, die von opengl / directx gesteuert werden, oder ist das Overlay nur eine Funktion in der Windows-API? Wie erhalten Fraps auch die fps des Fensters?

3

1 Antwort auf die Frage

6
Ryck

FRAPS und ähnliche Programme funktionieren, indem sie die API-Aufrufe verwenden, die zum Anzeigen des gerenderten Frames verwendet werden (z. B. IDirect3DDevice9 :: Present- Methode oder OpenGL SwapBuffers () ).

Wenn ein Spiel gerade einen neuen Frame anzeigt, wird die Programmausführung im Wesentlichen an den von FRAPS installierten Hook übertragen. Dieser Code kann den Rahmen nach Belieben modifizieren, den FPS-Zähler darüber ziehen, Farben ändern oder einen Screenshot für die Videoaufnahme erstellen. Wenn dies abgeschlossen ist, ruft FRAPS die ursprüngliche API zur Anzeige des Frames auf.

Unterschiedliche Grafik-APIs erfordern unterschiedliche Hooks. FRAPS muss daher separate Implementierungen für OpenGL und Direct3D 8/9/10 usw. haben. Das bedeutet auch, dass neue Technologien (wie Direct2D) veröffentlicht werden, für die FRAPS Aktualisierungen benötigt.

Der eigentliche Prozess zum Installieren und Entfernen von Haken ist ziemlich kompliziert. Weitere Informationen finden Sie in dieser StackOverflow-Frage:

Hooking DirectX EndScene von einer injizierten DLL

oder hier: Fallbeispiel: Fraps

FPS zu zählen ist einfach; Programme brauchen nur die Zeit zwischen den Bildern. Zum Beispiel: Frame-Zeit = 20 ms; FPS = 1000 ms / 20 ms = 50;

Wenn die Frame-Zeiten stark variieren, schwankt der FPS-Wert stark. Eine bessere Methode wäre die Berechnung eines Durchschnitts der letzten 10 Frames oder das Zählen der Anzahl der über die letzte Sekunde gezogenen Frames. Die Zahlen in FRAPS scheinen sich jedoch zu schnell zu ändern.

Wäre dies auch so, wie die Dampfüberlagerung funktioniert? agz vor 11 Jahren 0
Ja, im Allgemeinen funktioniert jede Software, die ein Overlay in OpenGL- oder D3D-Anwendungen im Vollbildmodus anzeigt, auf dieselbe Weise Ryck vor 11 Jahren 0