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?
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.
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.
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.
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.
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:
Procedure OnIdle;
Begin
Render;
Sleep(Wert);
Process; //Nur als Ersatz für sonstige Berechnungen (FPS, Eingaben, etc)
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.
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.
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.