Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 18, 2025 00:12

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: FPS Probleme?
BeitragVerfasst: Do Jan 12, 2006 20:19 
Offline
DGL Member

Registriert: Fr Jul 30, 2004 07:35
Beiträge: 26
Ich bin mir nicht sicher, ob es tatsächlich ein Problem ist oder ich mir zu viele Sorgen machen.
Ich habe zwei kleine Demos geschrieben, um zu sehen, wie viel FPS ich tatsächlich mit SDL (mit OpenGL und ohne) herausbekomme. Nach einigen Tests mit meinen Computern und den PCs von einigen Freunden sind mir einige merkwürdige Phänomene aufgefallen.
Beabsichtigt war, dass die FPS sofort bestimmt werden, und nicht von null an hochgezählt wird. Das funktionniert anscheinend nur auf einigen PCs. Merkwürdig auch, dass bei der Demo, bei dem das Quad gezeichnet wird, auf einem meiner Computer (500 MHz; 128 MB RAM; ATI Rage Pro mit 8 MB Grafikspeicher) unzulässige FPS - Werte angezeigt werden (wie 0, 2, 4 oder auch 1000 FPS). Die Anwendung läuft aber dennoch recht schnell (es ist bei der Quad - Demo möglich, sich mit den Pfeiltasten um den Quad zu drehen).

Meine FPS - Berechnung sieht folgendermaßen aus:

Code:
  1.  
  2. Initialisierung von SDL;
  3. StartTick := SDL_GetTicks;
  4.  
  5. SDL - Loop Anfang
  6.  
  7.  Frames := Frames + 1;
  8.  CurTick := SDL_GetTicks;
  9.  
  10.  TickNow := CurTick - StartTick;
  11.  
  12.  FPS := (Frames / TickNow)*1000;
  13.  
  14. SDL - Loop Ende
  15. SDL_Quit;
  16.  


Hab ich mit der FPS - Berechnung geschlampt oder ist mein "Problem" normal? Ich habe die Demos als Anhang hinzugefügt, damit man sich ein Bild von der Sache machen kann.

P.S.: Die Window - Demo ist nicht OpenGL-beschleunigt, deshalb ist es in Ordnung, wenn die Quad - Demo mehr FPS hat. Die SDL - DLLs sind in der RAR - Datei nicht mitgeliefert.


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

_________________
[http://www.freeze-dev.de]


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 12, 2006 23:49 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Also deine Berechnung ist ein Framecounter welcher dir die durchschnittliche Framerate über die gesamte Zeit ermittelt (falls vorher kein überlauf eintritt).

Wenn du einfach nur die Frames/Sek berechnen willst, solltest du immer die aktuelle Zeit bestimmen, und wenn die Differenz zur startzeit >=1 Sec ist, die Frames ausgeben, dann auf 0 setzen und startzeit = aktzeit setzen. Dann hast du immer die Frames pro Sekunde.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 13, 2006 02:23 
Offline
DGL Member

Registriert: Do Dez 01, 2005 12:55
Beiträge: 41
Code:
  1. StartTime:= GetTickCount;
  2.   Render;
  3.   DrawTime:= GetTickCount - StartTime;
  4.   Inc(TimeCount, DrawTime);
  5.   Inc(FrameCount);
  6.  
  7.   if TimeCount >= 1000 then begin
  8.     Frames:= FrameCount;
  9.     TimeCount:= TimeCount - 1000;
  10.     FrameCount:= 0;
  11.     Caption:= InttoStr(Frames) + 'FPS';
  12.     ErrorHandler;
  13.   end;

so einfach ist das
Gruß
Jan


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 13, 2006 11:22 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Ja gut. Der Verweis aufs Wiki war obligatorisch:

http://wiki.delphigl.com/index.php/Framecounter

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 13, 2006 12:35 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Wieso wird da eigentlich nur die zeit fürs rendern genommen? Rein theoretisch kann ja außerhalb des Renderns Zeit verbraten werden. Wenn das mehr als Bruchteile wären dürfte dies das Flussverhalten (Timebased Movement) empfindlich stören. Also ich bin der Meinung, dass man nur einmal pro Frame zeit messen sollte und das sich der Zeitraum für ein Frame bis zum nächsten definierten Punkt erstrecken sollte.

Wobei es beim OnIdle, wenn das Fenster in der Größe verändert wird, dann zu einem Stillstand kommt was sich in extrem großen Sprungen im Movement äußert. Was eigentlich wieder dafür sprechen würde es so zu lassen wie es ist. Auch wenn das mitunter rechnerrisch nicht die richtigste Lösung wäre.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 13, 2006 15:16 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
Ich denke, diese Eigenart stammt u.A. aus dem Bomberman-Tutorial. Dort misst Sascha ja auch nur die Zeit, die zum Rendern benötigt wird.

Doch gerade bei Netzwerk-Geschichten fällt es durchaus auf, wenn man lediglich die Renderzeit in das Timebased Movement einrechnet. Da ist es dann doch wesentlich besser und genauer, wenn man einmal pro Frame die Zeit abgreift und dadurch die tatsächlichen fps erhält ;)

_________________
"Für kein Tier wird so viel gearbeitet wie für die Katz'."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 13, 2006 16:55 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Noch krasser sind Framecounter, welche anhand eines Renderdurchganges berechnen wieviele sie in einer Sekunde geschafft hätten(!). Die bilden dann immer einnen Mittelwert über diese Werte, für die letzten x durchläufe. Da kommen dann selbst auf meiner Intel OnBoard Graka Astronomische Werte raus. ;)

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jan 15, 2006 19:46 
Offline
DGL Member

Registriert: Fr Jul 30, 2004 07:35
Beiträge: 26
Vielen Dank für die Hilfe! Ich habe es jetzt hinbekommen :D

_________________
[http://www.freeze-dev.de]


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 14 Queries | GZIP : On ]