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"
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.
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:
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"
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.
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"
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.
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"
Mitglieder in diesem Forum: 0 Mitglieder und 2 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.