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

Aktuelle Zeit: Sa Jul 05, 2025 17:31

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



Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Schlechte Performance mit glBitmap()
BeitragVerfasst: Di Jan 15, 2008 12:19 
Offline
DGL Member
Benutzeravatar

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

ich benutze wglUseFontBitmaps um meine Schrift zu erstellen. Die Ausgabe arbeitet ja bekanntlich mit Displaylisten bzw glBitmap().

Mein Problem dabei ist: Es ist sau langsam.
Die FPS sinkt um ca. 30% ab.
Insgesamt werden vllt. 300 Zeichen gezeichnet. Da sie mit Schatten gezeichnet werden also ca 600.
siehe hier.

Frage ist nun: Ist die Performance wirklich so schlecht?


Danke im Voraus

damadmax

_________________
Es werde Licht.
glEnable(GL_LIGHTING);
Und es ward Licht.


Zitat aus einem Java Buch: "C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off"

on error goto next


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 15, 2008 12:36 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Diese Bitmaps sind nicht sonderlich optimiert. Bzw sind Grafikkarten eher für Flächen mit Texturen ausgelegt als für direkte Framebuffer manipulationen. Also so etwas wie direktes setzen von pixeln.

Aber mich würde auch mal interessieren wie du sie zeichnest. Ich hoffe du aktivierst nur 1 Mal den Orthomodus? Zu häufiges wechseln kann auch ziemlich fies Performance kosten.

Alternativ dazu würde ich eher zu Schriften bestehend aus Texturen empfehlen. Diese werden auch richtig von der Grafikkarte beschleunigt und das sollte zu mindest beim Zeichnen weniger Einbuße mit sich bringen. Wenn du mit SDL arbeitest gibt es im SDK aber auch eine Unit die die Schriften von SDL kappselt. Die heißt easySDLFonts.pas, wenn ich mich nicht irre.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 15, 2008 12:52 
Offline
DGL Member
Benutzeravatar

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

Ja ich wechsle nur einmal in den Ortho und wieder zurück in die Perspektive.
Die Zeichenfarbe wird auch nur einmal gesetzt.
Und anschliessend für jede Zeile:

Code:
  1.  
  2.   glRasterPos3fv(@Position[0]);
  3.   glListBase(FontLists);
  4.   glCallLists(Length(pText), GL_UNSIGNED_BYTE, Pointer(pText));
  5.  

Also so wie aus auch im wiki unter wglUseFontBitmaps beschrieben ist.


Aber egal.
Ich werde mich heute abend mal hinsetzen und das ganze schön mit Quads machen.
Prinzipiell braucht man ja nur die Texturkoordinate bei entsprechender Textur entsprechend verschieben.

_________________
Es werde Licht.
glEnable(GL_LIGHTING);
Und es ward Licht.


Zitat aus einem Java Buch: "C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off"

on error goto next


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 15, 2008 13:42 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Das Einzige was du an dem Code noch verändern könntest wäre die glListBase. Die Startliste ist ja gleiche, da die Fonts auch gleich sind. Ich denke aber nicht, dass das etwas bringen wird.

Quads: Ich weiß nicht genau worauf du hinauf willst. Allerdings ist es so, dass du eine Textur hast die die verschiedenen Buchstaben enthält und diese dann ausschnittsweise dargestellt wird. So gesehen ist das nicht viel dahiner. Du solltest das aber nicht unterschätzen. Das kann durchaus komplexer werden als du glaubst. ;)


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

Registriert: Sa Aug 18, 2007 18:47
Beiträge: 694
Wohnort: Köln
Programmiersprache: Java
bzgl Quads: ja so war es gemeint. eine textur. jeder buchstabe ein quad. texturkoordinaten anpassen. zeichnen.

ich habe mal testweise auf wglUseFontOutlines umgestellt. ist etwas anders in der handhabung aber doch um einiges schneller. obwohl er ja doch "echte" geometrie zeichnet.
nur sieht es etwas -naja- beschissen aus. dafür braucht man auf jeden fall kantenglättung.
ich werde mal versuchen die schrift auf diese art in eine textur zu rendern und diese dann mit quads und blending zu zeichnen.

_________________
Es werde Licht.
glEnable(GL_LIGHTING);
Und es ward Licht.


Zitat aus einem Java Buch: "C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off"

on error goto next


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

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Hattest du dir mal den Link angeschaut den ich gepostet hatte?

Aber über wglUseFontOutlines? Findest du das nicht ein bisschen sehr umständlich? Es wäre sicherlich einfacher, wenn du ein einfaches Bitmap benutzt und dann mit der Canvas des Bitmaps deine Zeichen darauf aufbringst. Wenn man es denn unbedingt selber machen muss. *noch mal dezenz auf den Link deut* ;) Denn da gibts schon so was wie antialised Schrift umhüllt von einer OpenGL ähnlichen Schnittstelle.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 15, 2008 15:54 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Aug 18, 2007 18:47
Beiträge: 694
Wohnort: Köln
Programmiersprache: Java
natürlich habe ich den Link noch nicht gesehen!!! (bzw vergessen)

ich höre sowieso selten auf das was man mir sagt...(gruß an meine freundin) :D :D :D

_________________
Es werde Licht.
glEnable(GL_LIGHTING);
Und es ward Licht.


Zitat aus einem Java Buch: "C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off"

on error goto next


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 16, 2008 01:29 
Offline
DGL Member
Benutzeravatar

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

Nochmal danke Lossy.

Mit der TextSuite sieht das mal echt Klasse aus. Hut ab!
Und die FPS gehen nur um einen Bruchteil des vorherigen Einbruchs runter. In Worten: Zehn!! anstatt vorher ca. 100 FPS

Gute Nacht :)

_________________
Es werde Licht.
glEnable(GL_LIGHTING);
Und es ward Licht.


Zitat aus einem Java Buch: "C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off"

on error goto next


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 » OpenGL


Wer ist online?

Mitglieder in diesem Forum: Google [Bot], Majestic-12 [Bot] und 17 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.008s | 16 Queries | GZIP : On ]