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

Aktuelle Zeit: Fr Jul 18, 2025 08:17

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



Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Problem mit wglUseFontBitmaps
BeitragVerfasst: Mo Jan 30, 2006 14:08 
Offline
DGL Member

Registriert: Fr Jan 27, 2006 19:21
Beiträge: 4
Hallo alle zusammen.

Habe großes Perfomance-Problem mit dem wglUseFontBitmaps. Habe hier mehrere Systeme stehen, zwei mit ner onboard-GraKa, zwei mit ner "richtigen". Bei den richtigen ATI Karten läuft alles bestens (0% CPU last), bei den beiden anderen Kisten (die laut Angaben OpenGL 1.4 unterstützen) habe ich riesege Probleme. Solange ich die Schriften weglasse ist alles gut (auch 0%) sobald jedoch Text irgendwo ausgegeben wird (bzw. sobald ich die wglUseFontBitmaps benutze) hörts auf! 40-50% CPU Auslastung!!! Mit Vektorschriftarten klappt alles super, jedoch sind die für kleine Schriften nicht zu gebrauchen!
Dachte es könnte ein Texturproblem sein - also die Grafikkarten Probleme mit grossen Texturen haben. Habe also einfach mal ein Quad mit ner großen Textur versehen und geblendet - alles gut!

Es liegt also an den Bitmapfonts! Kennt sich jemand mit Textausgaben aus und weiß woran das liegen könnte??
Bin echt fast soweit mir den Text in Bitmaps zu hauen und als Textur zu benutzen (aber das kanns doch nicht sein - außerdem ist das eigentlich genau das, was wglUseFontBitmaps machen sollte!).


MFG

MT


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Problem mit wglUseFontBitmaps
BeitragVerfasst: Mo Jan 30, 2006 15:12 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
mts hat geschrieben:
Es liegt also an den Bitmapfonts! Kennt sich jemand mit Textausgaben aus und weiß woran das liegen könnte??

Auskennen. Ein Bisschen. Alles andere werden wir sehen. ;-)

mts hat geschrieben:
Bin echt fast soweit mir den Text in Bitmaps zu hauen und als Textur zu benutzen (aber das kanns doch nicht sein - außerdem ist das eigentlich genau das, was wglUseFontBitmaps machen sollte!).

Jain. OpenGL nimmt die Defintion von BITmap sehr genau. Es gibt zwar auch die Möglichkeit Texturen mit einem 1 Bit Kanal zu benutzen aber das hat mit Windows Bitmaps, die eher für den Namen zustandig sind, nicht wirklich viel zu tun. Zu mindest nur dann, wenn man 1 Bittige betrachtet. Und dann sind BitmapFonts noch lange keine Texturen sondern werden direkt als Bits gesetzt. Und zwar mit der Methode glBitmap der man einen Bitmapspeicherbereich übergibt.

So viel zu vollkommenen Verwirrung. Mal eine Frage vorweg. Lässt du deine Bitmapfonts am Anfang des Programms generieren? Wenn nein, dann solltest du das tun. Wenn doch, dann kann die erhöhte Last auch daher kommen, dass du zwischen glOrtho und gluFrustrum wechselst. Alleine das Wechseln von 3D in den 2D Modus schlägt mit knapp 5-10% Leistung zu buche.

Wenn es das auch nicht sein sollte so bräuchten wir wohl mal ein paar mehr infos. Also was du genau machst.

Was Vektorschriften angeht hast du recht. Die sind eher nicht für so etwas geeignet. Aber Texturfonts sind durchaus eine sinnvolle und gebräuchliche Alternative. Allerdings wird dann nicht der Text komplett in eine Textur gepackt sondern die einzelnen Buchstaben so das man sie wieder verweden kann. Dann wird sich aus dieser Textur der enstprechende Text gebastelt.

PS: Ich könnte mir aber durchaus vorstellen, dass die ein oder andere Implementation besser oder schlechter auf Bitmapfonts optimiert ist. Da deine OnBoard Chips dieses Problem haben würde das sogar in Schema passen. Aber dazu mal bitte ein paar Infos und wenn möglich Quellcode.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 31, 2006 19:32 
Offline
DGL Member

Registriert: Fr Jan 27, 2006 19:21
Beiträge: 4
Erklärt sich denk ich selbs:

Code:
  1. function CreateGLFont(fontName: string; fontSize: integer;
  2.   fontStyle: TFontStyles): Cardinal;
  3. var
  4.   Font: TFont;
  5. begin
  6.   result := glGenLists(256);
  7.  
  8.   Font := TFont.Create;
  9.   try
  10.     Font.Name := fontName;
  11.     Font.Size := fontSize;
  12.     Font.Style := fontStyle;
  13.  
  14.     SelectObject(DC, Font.Handle);
  15.     wglUseFontBitmaps(DC, 0, 128, result);
  16.   finally
  17.     FreeAndNil(Font);
  18.   end;
  19. end;
  20.  
  21.  
  22. procedure ShowGLText(pText: String; FontList: Cardinal);
  23. begin
  24.   glListBase(FontList);
  25.   glCallLists(Length(pText), GL_UNSIGNED_BYTE, Pointer(pText));
  26. end;



Und hier noch kurz einen Ausschnitt aus der OpenGL Initialisierung:

Code:
  1.   if not InitOpenGL then
  2.     exit;
  3.  
  4.   RC := CreateRenderingContext(DC, [opDoubleBuffered], 32, 24, 0, 0, 0, 0);
  5.   ActivateRenderingContext(DC, RC);
  6.  
  7.   glOrtho(0, _WinCtrl.ClientWidth, 0, _WinCtrl.ClientHeight, NearClipping,
  8.                                                                    FarClipping);
  9.   SetBackgroundColor(0, 0, 0, 0);
  10.   glEnable(GL_DEPTH_TEST);
  11.   glEnable(GL_BLEND);
  12.   glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
  13.   glHint(GL_LINE_SMOOTH_HINT, GL_NICEST);
  14.  
  15.  
  16.   glMatrixMode(GL_MODELVIEW);



Hat sonst jemand ne Idee wie ich das umsetzen kann. Das ganze läuft nachher auf Embedded-Systemen, da ist nun mal ne OnBoard Grafik am einfachsten. (also bitte keine Tips wie: Tu ne richtige Grafikkarte rein)


Gruss
mts

// Lossy: Code durch Pascaltags ersetzt


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Feb 01, 2006 10:09 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Also für mich sieht das jetzt so aus wie ich es eigentlich auch machen würde. Wobei du aber nur 128 Zeichen erstellst aber für 256 DLs reserviert hast. Ich denke mal es wird dann wohl tatsächlich daran liegen, dass die Chips nicht so gut bestückt sind. Wobei sich mir immer noch die Frage stellt worin bzw wie du renderst. Also mit einem OnIdle wirst du es sicherlich nicht tun. Je nachdem wie du das machst kann es schon ein bisschen Zeit in Anspruch nehmen. Ungünstige Timing können auch zu so etwas führen.

Sonst würde ich dir aber generell empfehlen, dass du dann lieber auf Texturfonts setzen solltest. Eine andere Alternative wirst du nicht haben. Hier mal ein paar dinge die ich für Texturefonts bisher immer benutzt habe.

Unit glBitmap zum Laden von Texturen
Unit glText zum Benutzen von Fonts. Für Texturfonts wird die glBitmap benötigt.

Tool zum erstellen von Texturfonts. Allerdings funktionieren einige Teile dabei definitiv nicht. Und werden auch nicht, da ich bereits an etwas völlig neuem noch nie Dagewesenem arbeite. Braucht bare noch ein bisschen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Feb 01, 2006 17:23 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
Lossy eX hat geschrieben:
Tool zum erstellen von Texturfonts. Allerdings funktionieren einige Teile dabei definitiv nicht. Und werden auch nicht, da ich bereits an etwas völlig neuem noch nie Dagewesenem arbeite. Braucht bare noch ein bisschen.

:lol: :lol: :lol: :wink:

_________________
"Für kein Tier wird so viel gearbeitet wie für die Katz'."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Feb 01, 2006 20:40 
Offline
DGL Member

Registriert: Fr Jan 27, 2006 19:21
Beiträge: 4
Danke! Lossy eX

Ist glaub ich wirklich die beste Methode. Bin mir nur nicht sicher ob ich mit deiner Lib das ganze Ausgebe, aber das Tool im die Textur zu erstellen ist mir schonmal SEHR sympatisch!


MFG

mts


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Feb 02, 2006 06:31 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Na ja. Es gibt noch ein ähnliches Tool wie meines. Das funktioniert sogar noch besser. Das dumme ist nur, dass das irgendwie jeder anders berechnet und bei dem anderen Tool war es mir leider nicht Möglich dort sinnvoll herrauszufinden wie die Zeichen positioniert wurden. Was zu komischen Verschiebungen einzellner Zeichen geführt hat.

Musste mal schauen. Wenn du etwas ähnliches machen willst wie ich in der glText dann kannste ja schauen wie die Zeichen positioniert wurden.


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

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 14 Queries | GZIP : On ]