In einem 2D-OpenGL-Spiel habe ich Performanceprobleme.
Aufgefallen ist es mir als erstes, als ich mein Spiel auf dem Rechner in der Schule getestet habe. Der hat zwar keine wahnsinnige Grafikpower, aber andere Dinge die mit OpenGL gemacht sind laufen auch mit ungefähr 50 FPS.
Ich konnte keine Fotos davon machen, aber ich habe mal meine VirtualBox angeworfen und da kamen genau die selben Grafikfehler (Bild 1). Normalerweise sollte in den schwarzen Kästen Texte stehen. Gemacht ist das mit der TextSuite hier aus dem Forum.
Ich nutze eigentlich nur den orthogonalen Rendermodus. Die Größe passe des Viewports passe ich an die Fenstergröße an.
Im Spiel besteht jeder Block eines Levels aus 24*24 Pixeln. Ich rendere also immer mehrere Quads. Dabei gibt es auch unterschiedliche Texturen usw. Der Hintergrund wird beispielsweise auch alle 128 Pixel gekachelt.
Ich habe CullFace, Depthtesting, Alphatesting und Blending aktiviert. Auf der VirtualBox läuft es mit 4 FPS. Wenn ich alles Ausschalte (Bild 2) läuft es mit 6 FPS. Kein großer Unterschied.
Ein Tutorial-Programm von hier aus dem Forum läuft allerdings mit 50 FPS und ist 3D.
Mache ich da jetzt was falsch (solange man das bei den Informationen erkennen kann) ?
Vielleicht gibt es da so Tricks und Kniffe, welche ich noch nicht kenne.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Also als Erstes mal etwas ganz Wichtiges. In einer virtuellen Maschine hast du keine Hardwarebeschleunigung! Alles was du machst wird auf der CPU berechnet. Und dann kommt es extrem darauf an was du machst. Du hast mehr Texturen, mehr Flächen, Sound etc und füllst einen größeren Bereich des Bildschirmes aus als die Demo. Diese hat außerdem kein Blending was du bei jeder Fläche aktiviert hast. Also ich denke, dass der Geschwindigkeitsunterschied durchaus berechtig ist. Von daher würde ich auch sagen. Bei dir in der Schule gibt es auch keine OpenGL Beschleunigung.
Diesen Effekt kannst du bei dir lokal auch erzeugen in du die Hardwarebeschleunigung in den Anzeigeoptionen deaktivierst bzw weit genug runter drehst. Dann wird nämlich die Softwareimplementation von Windows verwendet und die unterstützt nur OpenGL 1.1 Funktionalität und läuft auf der CPU.
Um das evtl etwas zu beschleunigen solltest du auf Blending immer dann verzichten wenn du es nicht benötigst. Also deine Welt / Figuren etc. haben keine weiche Kannten. Also reicht es, wenn du dich auf den Alphatest beschränkst. Und nur die Tropfen blendest. Den Tiefentest kann man bei 2D Anwendungen meistens auch deaktivieren. Dann kommt es nur noch auf die Zeichenreihenfolge an. So etwas würde auch bei Hardwarebeschleunigung etwas mehr Geschwindigkeit bringen. Allerdings solltest du auch nur die States setzten die du benötigst. Also blending zum Beispiel nicht für jede Fläche seperat aktivieren bzw anschließend deaktivieren. Idealerweise ein mal aktivieren alle zu blendenen Flächen zeichnen und deaktivieren.
ABER all das wird keine Wunder vollbringen (können), denn Software ist Software und somit langsam. Du kannst so etwas vermeiden in dem du überprüfst ob eine Hardware Beschleunigung vorliegt oder nicht. Wenn nicht kann das Spiel seinen Dienst verweigern. Denn das Software heute auf dem Software renderer laufen muss macht eigentlich kaum Sinn.
Zusätzlich solltest du auch auf Fehler prüfen. Also mittel glGetError kannst du OpenGL Fehler überprüfen. Das sollte immer 0 sein. Ansonsten verwendest du etwas was nicht erlaubt ist oder die Karte/Treiber nicht kennen. Vermute mal das wird auch der Fall sein.
Bei der TextSuite gibt es die Methoden tsGetError / tsGetErrorString und seit neuem auch tsGetErrorFunction. Da schau mal bitte ob es einen Fehler bei den Fonts gibt. Sollte es aber, denn sonst wären sie ja da.
PS: 24x24? Das ist kein Power Of Two. Das wären entweder 16x16 oder 32x32.
Also als Erstes mal etwas ganz Wichtiges. In einer virtuellen Maschine hast du keine Hardwarebeschleunigung!Alles was du machst wird auf der CPU berechnet. Und dann kommt es extrem darauf an was du machst. Du hast mehr Texturen, mehr Flächen, Sound etc und füllst einen größeren Bereich des Bildschirmes aus als die Demo.
Dessen bin ich mir bewusst, ich habe das nur unter verschiedenen bedingungen getestet.
Lossy eX hat geschrieben:
Diese hat außerdem kein Blending was du bei jeder Fläche aktiviert hast. Also ich denke, dass der Geschwindigkeitsunterschied durchaus berechtig ist.
Testweise habe ich das Blending deaktiviert. Es lief eben mit 2FPS mehr.
Lossy eX hat geschrieben:
Von daher würde ich auch sagen. Bei dir in der Schule gibt es auch keine OpenGL Beschleunigung.
Zumindest in ein Grafikkartentreiber drauf. Ich schätze schon, das da Hardwarebeschleunigung an ist. (Sicher bin ich mir leider nicht.)
Lossy eX hat geschrieben:
Diesen Effekt kannst du bei dir lokal auch erzeugen in du die Hardwarebeschleunigung in den Anzeigeoptionen deaktivierst bzw weit genug runter drehst. Dann wird nämlich die Softwareimplementation von Windows verwendet und die unterstützt nur OpenGL 1.1 Funktionalität und läuft auf der CPU.
Ich bin gespannt was dabei rauskommt.
Lossy eX hat geschrieben:
Um das evtl etwas zu beschleunigen solltest du auf Blending immer dann verzichten wenn du es nicht benötigst. Also deine Welt / Figuren etc. haben keine weiche Kannten. Also reicht es, wenn du dich auf den Alphatest beschränkst. Und nur die Tropfen blendest. Den Tiefentest kann man bei 2D Anwendungen meistens auch deaktivieren. Dann kommt es nur noch auf die Zeichenreihenfolge an. So etwas würde auch bei Hardwarebeschleunigung etwas mehr Geschwindigkeit bringen. Allerdings solltest du auch nur die States setzten die du benötigst. Also blending zum Beispiel nicht für jede Fläche seperat aktivieren bzw anschließend deaktivieren. Idealerweise ein mal aktivieren alle zu blendenen Flächen zeichnen und deaktivieren.
Ich schau da mal.
Lossy eX hat geschrieben:
ABER all das wird keine Wunder vollbringen (können), denn Software ist Software und somit langsam. Du kannst so etwas vermeiden in dem du überprüfst ob eine Hardware Beschleunigung vorliegt oder nicht. Wenn nicht kann das Spiel seinen Dienst verweigern. Denn das Software heute auf dem Software renderer laufen muss macht eigentlich kaum Sinn.
Stimmt auch wieder. Mich hat es nur gewundert, das es sich so extrem ausgeschlagen hat. Und andere kleine Spiele gingen auch.
Lossy eX hat geschrieben:
Zusätzlich solltest du auch auf Fehler prüfen. Also mittel glGetError kannst du OpenGL Fehler überprüfen. Das sollte immer 0 sein. Ansonsten verwendest du etwas was nicht erlaubt ist oder die Karte/Treiber nicht kennen. Vermute mal das wird auch der Fall sein.
Bei der TextSuite gibt es die Methoden tsGetError / tsGetErrorString und seit neuem auch tsGetErrorFunction. Da schau mal bitte ob es einen Fehler bei den Fonts gibt. Sollte es aber, denn sonst wären sie ja da.
Das habe ich noch nicht gemacht. Werde das mal austesten.
Lossy eX hat geschrieben:
PS: 24x24? Das ist kein Power Of Two. Das wären entweder 16x16 oder 32x32.
Ich habe die Bilder im Format 32*32 vorliegen und alles außer den 24*24 Pixel ist transparent. In einem anderen Thread stand, dass das okay so ist.
edit: Stimmt. Die Schriften sind alle weg. Wäre aber schon eigenartig, wenn auf den Rechnern in der Schule die Hardwarebeschleunig aus wäre.
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Was ist daran eigenartig? Ist ein beliebtes Mittel, Schüler vom Spielen abzuhalten
Gruß Lord Horazont
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Na ja. Nur weil du einen Treiber installiert hast heißt es nicht, dass OpenGL auch beschleunigt wird. Denn früher gab es mal reine 2D Karten. Und ich hatte schon mal das Problem, dass OpenGL trotz richtig installiertem Treiber nicht ging. War nen Treiberfehler. Bzw bei meiner Readeon X800 funktioniert Direct3D nicht mit den aktuellen ATI Treibern.
Das mit dem Blending hatte ich überlesen. Aber der Geschwindigkeitsunterschied ist denke ich mal normal. Du machst ja schließlich auch einiges mehr als die Demo. Bzw denke ich auch, dass die in irgendeiner Art Funktionsaufrufe einsparen werden. Displayliste oder so was.
Registriert: Di Mai 18, 2004 16:45 Beiträge: 2623 Wohnort: Berlin
Programmiersprache: Go, C/C++
Wenn du ne Linux Xen kernel mit deiner Linuxdistro verwendest, dann kanst du auch in ner VM umgebung 3D Hardware nutzen.
OpenGL <> OpenGL Anwendung, du hast schon FPS unterschiede, wenn du den gleichen code mit Java,c,c++ und fpc ausführst.
Schlimm sind auch unterschiedliche Treiberversionen, die können viel ausmachen.
Dann kommen Kartenspezifische features hinzu, z.B. Aufrufe, die auf unterschiedlichen Karten unterschiedlich schnell sind.
Wenn es um CPU Rasterizer geht, dann sollte die Füllrate so niedrig wie möglich sein, also möglichst vorher auf z sortieren und dann erst zeichnen, sowie nicht sichtbare Objetke weg lassen.
_________________ "Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren" Benjamin Franklin
Was ist daran eigenartig? Ist ein beliebtes Mittel, Schüler vom Spielen abzuhalten
Gruß Lord Horazont
Erwischt . Dann scheint das Spiel was immer noch läuft keine OpenGL zu nutzen.
Ist eigentlich auch logisch. Es gibt diverse Schüler-Ärgerungs-Tools (Mastereye, Lehrer Console), was die anderen immer teuflisch aufregt. Und außerdem ist in den meisten Zimmern irgendwo ein Laptop und ein Beamer. Da muss eigentlich die Hardwareunterstützung runterschaltet werden, sonst hätte der Beamer eigentlich das Bild vom Mediaplayer nicht anzeigen können. Und mit Mastereye wird es ähnlich sein.
Mit etwas Logik hätte ich auch selber dahinterkommen können .
Den sonst habe ich versucht auch nur das zu Zeichnen was gerade sichtbar ist, und und und.
Dann bin ich ja beruhigt, dass es ein ganz normales Phänomen zu sein scheint.
Mitglieder in diesem Forum: 0 Mitglieder und 5 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.