Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Seltsames Verhalten von Application.OnIdle (https://www.delphipraxis.net/32047-seltsames-verhalten-von-application-onidle.html)

DeerHunter 18. Okt 2004 03:34


Seltsames Verhalten von Application.OnIdle
 
Hallo, ich arbeite gerade an einem kleinen Spielchen; für die Darstellung verwende ich Application.OnIdle, (mit Done := False), sodass permanent neu das Spielfeld gezeichnet wird.
Ich erreiche somit bei wohlbemerkt 100% CPU Auslastung eine Framerate, die stets bei ungefähr 100 FPS liegt.
Das seltsame dabei ist nun: wenn ich während der Laufzeit meines Spielchens die Auflösung ändere, dann erreiche ich plötzlich auch viel höhere Framerates von mehreren Hundert FPS. Wenn ich dann in der selben Auflösung das Spiel neu starte sind es aber wieder nur um die ~100.

Woran liegt das? gibt es da irgendwie ein internes Limit bei OnIdle..? und wenn ja, wieso wird das außer Kraft gesetzt bei Änderung der Auflösung? aber eigentlich kann das auch garnicht sein, da ich, wenn ich statt meinem normalen Spielfeld einfach nur ein Rechteck zeichne, trotzdem auf viel höhere FPS komme...
Kommt mir alles höchst seltsam vor, v.a. da ja die CPU Auslastung eigentlich immer 100% ist... wie kann er da plötzlich das doppelte an FPS erreichen?

Spezi1980 18. Okt 2004 07:00

Re: Seltsames Verhalten von Application.OnIdle
 
Hallo,
also, je größer die Auflösung vom Bildschirm ist, desto geringer ist auch die Framerate, da die Grafikkarte dann mehr zu leisten hat. Ich vermute mal, dass due die Auflösung heruntergesetzt hast und damit ist dann die Framerate auch plötzlich um ein vielfaches größer.

Die CPU Rechenzeit und das onIdle hat damit nur weniger etwas tun. Es kommt auch darauf an, ob du Dein Rechteck direkt im Grafikspeicher malst, oder im "normalen" Speicher und dann immer wieder in den Grafikspeicher kopierst.
In dem letzteren Fall hat natürlich die Auflösung eine noch viel größere Auswirkung und es kann schnell bei Verkleinerung der Auflösung die doppelte bis dreifache Framrate zunehmen.

Nenn doch noch ein Paar Informationen wie du das mit dem Zeichnen machst. (mittels DirectX, OpenGL, Welche Komponenten verwendest du?,...)

Gruß
Robert

DeerHunter 18. Okt 2004 08:38

Re: Seltsames Verhalten von Application.OnIdle
 
ich zeichne in ein TBitmap im speicher, welches dann auf eine Form geblittet wird... allerdings kann deine Theorie nicht ganz hinkommen, da das Programm, wenn ich es in einer niedrigeren Auflösung NEU STARTE, wieder nur mit ~100 FPS rennt. (hatte ich oben auch geschrieben)

nur wenn ich, während es läuft, die Auflösung ändere (ob verkleinere oder vergrößere spielt keine Rolle), dann ja dann läufts schneller..

tja ich sag ja... seltsam seltsam

Spezi1980 18. Okt 2004 16:26

Re: Seltsames Verhalten von Application.OnIdle
 
Da ich damit noch keine Probleme hatte, kann ich dir leider auch nicht weiterhelfen. Ich könnte nur Vermutungen anstellen (Windows begrenzt die Framerate o.ä.) aber ohne weitere Informationen kann ich nichts genaues sagen.

Gruß Robert


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:40 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz