Fonts und Displaylists
-
Hallo Leute,
mittlerweile habe ich es geschafft Outlinefonts einigermassen ,gesittet' darzustellen.
Ich habe mir eine Klasse Font gezimmert:class Font { private: GLuint base; GLYPHMETRICSFLOAT gmf[256]; HFONT hOldFont; public: Font() { HFONT font; base = glGenLists(256); font = CreateFont(...); hOldFont = (HFONT)SelectObject(hddc, font); wglUseFontOutlines(...); SelectObject(hddc, hOldFont); } ~Font() { glDeleteLists(base, 256); } void DrawText() { glPushMatrix(); glPushAttrib(GL_LIST_BIT); glListBase(base); glCallLists(strlen(text), GL_UNSIGNED_BYTE, text); //text ist initialisiert glPopAttrib(); glPopMatrix(); } };
Folgendes Problem taucht trotzdem noch auf.
Rufe ich irgendwo in einer Funktionclass Font *f=new Font(...); f->DrawText(...); delete f;
auf, so wird die Schrift an der richtigen Stelle korrekt dargestellt.
Initialisiere ich aber f vorher irgendwo, lösche es am Ende und rufe mittendrin f->DrawText auf, so passiert gar nichts !!
so z.B in
class a { Font *f; a(){ f=new Font();} void b(){ f->DrawText(...);} ~a(){delete f;} }
Hier passiert nichts !
Warum nicht, ist da etwa irgendwas mit den APIs SelectObject falsch, oder muss man irgendwo noch DeleteObject einbauen ??
An der Projektions - Matrix kann es doch nicht liegen, die wird doch vorher noch gepushed !Danke.
Edit by Headhunter : C++ Tags
[ Dieser Beitrag wurde am 02.03.2003 um 16:39 Uhr von Headhunter editiert. ]
-
Hi !
Kann es sein dass du die Funktion a::b () net aufrufst ?
-
Hälst Du eigentlich alle für so dämlich ??
-
Ja.
Das ist für mich der einzig logische Grund warum deine Fontklasse so nicht funktioniert. Natürlich hätte man mehr Raum für Spekulationen wenn du was mehr Code posten würdest...
-
Vergiss es, ich bin selbst drauf gekommen.
Wenn man eine Klasse initialisiert, die vor dem Einschalten von OpenGL eine Display-List anfordert, funktioniert es nicht und es kommt nur 0 als ListBase zurück.