Also zu dem Floating-Point-Problem: dafür musst du die CPU anweisen, genauer zu arbeiten bzw. invalide Operations zu "ignorieren". Das kannst du mit folgendem Befehl machen, den du am besten als allererstes (entweder im initialization-Teil einer
unit oder im FormCreate-Event) aufrufst
Delphi-Quellcode:
procedure Set8087CW(NewCW: Word);
assembler;
asm
MOV Default8087CW, AX
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
{$IFDEF CPU386}
Set8087CW($133F);
{$ENDIF}
// ....
end;
Nun nochmal zum FPS-Problem: wie ich bereits schon vorher gesagt habe, liegt das an der aktivieren
vertikalen Synchronisation. Ich weiß nicht, wie man das mit
DirectX abstellt, ich kenn nur den
OpenGL-Befehl. Aber vSync kann man normalerweise im Konfigurationsmenü des Grafikkarten-Treiber deaktivieren.
Wenn dein Timer auf das
OnIdle-Event basiert, dann ist das kein Problem für große FPS-Zahlen. Wenn du den normalen
VCL-Timer benutzt mit einem Intervall von 1, dann wirst du eine maximale FPS-Zahl von ca. 50-70 erreichen. Aber mit dem OnIdle-Event kann man locker 5000 FPS und mehr erreichen.