Benutzer:Damadmax: Unterschied zwischen den Versionen
Aus DGL Wiki
| Zeile 2: | Zeile 2: | ||
''BETRETEN DER BAUSTELLE AUF EIGENE GEFAHR!'' | ''BETRETEN DER BAUSTELLE AUF EIGENE GEFAHR!'' | ||
| + | =Klassen= | ||
| + | |||
| + | Über die vergangene Zeit sind ein paar Klassen entstanden, die vielleicht für den ein oder anderen nützlich sein könnten. | ||
| + | |||
| + | Dies ist die Timing-Klasse wie ich sie in allen meiner Testprogramme und Projekte verwende. | ||
| + | |||
| + | <pascal>unit DETiming; | ||
| + | |||
| + | interface | ||
| + | |||
| + | type | ||
| + | TDETiming = class | ||
| + | public | ||
| + | constructor Create; | ||
| + | destructor Destroy; override; | ||
| + | procedure Init; | ||
| + | procedure Tick; | ||
| + | |||
| + | var | ||
| + | FrameTime : single; | ||
| + | FramesPerSecond : single; | ||
| + | FrameTimeInMs : single; | ||
| + | TotalFramesDrawn : int64; | ||
| + | CurrentFrames : integer; | ||
| + | TotalTimeRunning : single; | ||
| + | |||
| + | private var | ||
| + | QPCFreq : int64; | ||
| + | QPCLast : int64; | ||
| + | QPCNow : int64; | ||
| + | end; | ||
| + | |||
| + | implementation | ||
| + | |||
| + | uses | ||
| + | Windows; | ||
| + | |||
| + | constructor TDETiming.Create; | ||
| + | begin | ||
| + | inherited Create; | ||
| + | Init; | ||
| + | end; | ||
| + | |||
| + | destructor TDETiming.Destroy; | ||
| + | begin | ||
| + | inherited Destroy; | ||
| + | end; | ||
| + | |||
| + | procedure TDETiming.Init; | ||
| + | begin | ||
| + | QueryPerformanceCounter(QPCLast); | ||
| + | QueryPerformanceFrequency(QPCFreq); | ||
| + | CurrentFrames := 0; | ||
| + | TotalFramesDrawn := 0; | ||
| + | TotalTimeRunning := 0; | ||
| + | end; | ||
| + | |||
| + | procedure TDETiming.Tick; | ||
| + | begin | ||
| + | QueryPerformanceCounter(QPCNow); // PerfCounter abfragen | ||
| + | TotalFramesDrawn := TotalFramesDrawn + 1; // Selbsterklaerend :) | ||
| + | FrameTimeInMS := (QPCNow - QPCLast) / QPCFreq; // Zeit in Millisekunden pro Frame; fuer Timebased Movement | ||
| + | FrameTime := FrameTimeInMS * 1000.0; // Zeit in Sekunden | ||
| + | TotalTimeRunning := TotalTimeRunning + FrameTime; // Laufzeit in Sekunden | ||
| + | FramesPerSecond := 1.0 / FrameTimeInMs; // Frames pro Sekunde | ||
| + | QPCLast := QPCNow; // PerfCounter speichern | ||
| + | end;</pascal> | ||
Version vom 1. Juli 2008, 00:32 Uhr
Inhaltsverzeichnis
Über mich
BETRETEN DER BAUSTELLE AUF EIGENE GEFAHR!
Klassen
Über die vergangene Zeit sind ein paar Klassen entstanden, die vielleicht für den ein oder anderen nützlich sein könnten.
Dies ist die Timing-Klasse wie ich sie in allen meiner Testprogramme und Projekte verwende.
unit DETiming;
interface
type
TDETiming = class
public
constructor Create;
destructor Destroy; override;
procedure Init;
procedure Tick;
var
FrameTime : single;
FramesPerSecond : single;
FrameTimeInMs : single;
TotalFramesDrawn : int64;
CurrentFrames : integer;
TotalTimeRunning : single;
private var
QPCFreq : int64;
QPCLast : int64;
QPCNow : int64;
end;
implementation
uses
Windows;
constructor TDETiming.Create;
begin
inherited Create;
Init;
end;
destructor TDETiming.Destroy;
begin
inherited Destroy;
end;
procedure TDETiming.Init;
begin
QueryPerformanceCounter(QPCLast);
QueryPerformanceFrequency(QPCFreq);
CurrentFrames := 0;
TotalFramesDrawn := 0;
TotalTimeRunning := 0;
end;
procedure TDETiming.Tick;
begin
QueryPerformanceCounter(QPCNow); // PerfCounter abfragen
TotalFramesDrawn := TotalFramesDrawn + 1; // Selbsterklaerend :)
FrameTimeInMS := (QPCNow - QPCLast) / QPCFreq; // Zeit in Millisekunden pro Frame; fuer Timebased Movement
FrameTime := FrameTimeInMS * 1000.0; // Zeit in Sekunden
TotalTimeRunning := TotalTimeRunning + FrameTime; // Laufzeit in Sekunden
FramesPerSecond := 1.0 / FrameTimeInMs; // Frames pro Sekunde
QPCLast := QPCNow; // PerfCounter speichern
end;
Testanwendungen
Die ich in den vergangenen Monaten geschrieben habe.