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

Aktuelle Zeit: Mo Jul 07, 2025 16:19

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 10 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Framerate konstant bei 60 fps
BeitragVerfasst: Mo Aug 27, 2007 16:22 
Offline
DGL Member

Registriert: Mi Mär 31, 2004 15:24
Beiträge: 114
Hallo!

Gibt es in OpenGL die Möglichkeit, die Framerate zu begrenzen? Ich habe bei dem OpenGL 1.5 Template von DGL konstant 60 fps. Auch in meinen Programmen ist das der Fall - immer MAXIMAL 60 fps +/- 3. Um Performanceänderungen zu erkennen, würde ich aber natürlich gerne die maximal erreichbare Framerate haben.

Muss ich irgendwas (de-)aktivieren? Ist Euch das Problem bekannt?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Aug 27, 2007 16:57 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Ich vermute einfach mal, dass du V-Sync in deinen Grafikkartentreibern aktiviert hast. Das sorgt dafür, dass mit dem Zeichnen eines neuen Bildes so lange gewartet wird bis dieser gerade kein bild mehr dargestellt. Bei einem LCD nimmt das zu meist die Form von 60 Hz an.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Aug 27, 2007 17:03 
Offline
DGL Member

Registriert: Mi Mär 31, 2004 15:24
Beiträge: 114
Jepp, das war's. Danke!
Darauf wäre ich nie gekommen :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Aug 28, 2007 09:19 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Aug 18, 2007 18:47
Beiträge: 694
Wohnort: Köln
Programmiersprache: Java
Mh.

Hab nen Röhrenmonitor auf 85 Hz laufen und trotzdem konstant 60 FPS :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Aug 28, 2007 09:47 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Diese Einstellung gibt es bei einigen ATI Tools sowohl für OpenGL als auch für DirectX. Und das lässt sich seperat einstellen. Bzw den Vollbildmodus lasse ich mal außen vor, da du da sowieso eine eigene Frequenz angeben kannst.

Na ja. Nur weil du 85 Hz hast muss es nicht zwingend auch 85 oder mehr bekommen. Viele Faktoren können da eine Rolle spielen.

Es kann sein, dass du irgendwo nen sleep hast oder mit einem Timer rendest.

Es kann sein, dass du entsprechend viel renderst und du deswegen teilweise knapp länger brauchst als die Abtastrate des Monitors. Was dazu führen würde, dass er es nicht mehr zeichnen kann und auf den nächsten VSync warten muss. Oder halt du machst so viel, dass du Leistungstechnisch nicht über 60Hz kommst.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Aug 29, 2007 11:16 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Aug 18, 2007 18:47
Beiträge: 694
Wohnort: Köln
Programmiersprache: Java
Gut dann wird das wohl an dem IdleHandler liegen.
Und je nachdem wie man den Delay wählt läuft es auf älteren Rechnern...oder eben nicht.

Wobei ich die Lösung per IdleHandler eigentlich ziemlich beschissen finde...habe das aus einem VCL Template übernommen.
Bin zur Zeit dabei das ganze Projekt auf das 1.5 SDL Template umzustellen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Aug 29, 2007 11:48 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Was stört dich denn an dem IdleHandler?

Bzw mit dem Application.OnIdle erreichst du normal ein dauerhaftes Aufrufen der RenderMethode. Warum du da jetzt trotzdem nur so wenige bekommst lässt sich so auch nur schwer sagen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Aug 29, 2007 12:01 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Aug 18, 2007 18:47
Beiträge: 694
Wohnort: Köln
Programmiersprache: Java
Auf meinem Rechner AMD 4000+ und GF8600 läuft es mit einem Sleep(1) ganz wunderbar.
Um es auf meinem alten Rechner zum laufen zu bringen muss ich den Sleep-Wert schon höher ansetzen, weil sonst nichts gerendert wird.
Wenn ich den Sleep-Befehl komplett weglasse sehe ich garnix ausser die Skybox :)

Pseudocode:
Code:
  1.  
  2. Procedure OnIdle;
  3. Begin
  4.   Render;
  5.   Sleep(Wert);
  6.   Process; //Nur als Ersatz für sonstige Berechnungen (FPS, Eingaben, etc)
  7. End;
  8.  


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Aug 29, 2007 12:42 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Also mit dem Sleep ist es klar, dass es dann nicht so schnell wird. Allerdings kann ich von Sleeps beim Rendern nur abraten. Außer in besonderen Fällen.

Warum du nur die Skybox siehst kann ich nur raten. Ich vermute aber fast mal, dass du kein Doublebuffering oder du falsche Berechnungen oder so etwas hast. Denn das Sleep verdeckt nur den eigentlichen Fehler. Es wird in diesem Falle zwar eine oberflächliche Lösung sein aber wenn du mal ganz ehrlich bist, dann weißt du, dass es keine Lösung ist. ;)

Also da würde ich in jedem Fall mal etwas genauer forschen. Denn auch wenn du extreme Frameraten hast sollten normal keine Dinge verschwinden.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Aug 29, 2007 13:46 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Aug 18, 2007 18:47
Beiträge: 694
Wohnort: Köln
Programmiersprache: Java
Das Stichwort scheint hier Timebased Movement zu sein.

Und da scheint sich ein Fehler eingeschlichen zu haben. Die Szene wird so schnell gezeichnet das der Wert für das Movement/Faktor = 0 ist.
Wenn man dann dummerweise prüft ob zufällig durch 0 geteilt wird und dann darauf nicht anständig reagiert ist es ja kein Wunder dass das nicht klappt.

Danke dir für die Hinweise Lossy. :)


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 16 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:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.014s | 17 Queries | GZIP : On ]