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

Aktuelle Zeit: Fr Jul 18, 2025 00:44

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



Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Performanceprobleme
BeitragVerfasst: Mi Jan 30, 2008 14:47 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Nov 17, 2007 14:35
Beiträge: 28
Hi!

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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 30, 2008 15:25 
Offline
DGL Member
Benutzeravatar

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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 30, 2008 15:43 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Nov 17, 2007 14:35
Beiträge: 28
Danke für deine rasche und ausführliche Antwort!

Lossy eX hat geschrieben:
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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 30, 2008 17:27 
Offline
DGL Member
Benutzeravatar

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 :wink:

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 networkmy 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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 30, 2008 18:35 
Offline
DGL Member
Benutzeravatar

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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 30, 2008 22:46 
Offline
DGL Member
Benutzeravatar

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

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 31, 2008 14:15 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Nov 17, 2007 14:35
Beiträge: 28
Lord Horazont hat geschrieben:
Was ist daran eigenartig? Ist ein beliebtes Mittel, Schüler vom Spielen abzuhalten :wink:

Gruß Lord Horazont
Erwischt :wink: . 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 :idea: .

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.


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


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.007s | 15 Queries | GZIP : On ]