Benutzer:Damadmax: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
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

Ü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.

Landschaft