Ich hab mich mal ein bisschen mit Schriften beschäftigt und hab das auch prinzipiell ganz gut hingekriegt (persönliches Empfinden - sehr trügerisch ). Das ganze basiert auf der wglUseFontBitmaps und ist wie im Wiki beschrieben umgesetzt.
Mein Problem ist jetzt, dass die GL offenbar der Auffassung ist, dass Texte, die im Nirvana anfangen, auch im Nirvana enden. Genau gesagt, will ich eine Aufschrift so auf ein Panel bringen, dass ein Teil schon unterhalb der unteren Panelgrenze liegt und somit nicht mehr sichtbar ist. Sobald ich aber glRasterPos3f(0, -1, -1) aufrufe oder vorher versuche, mit glTranslate(0, -1, 0) den Bildausschnitt nach unten zu schieben, schreibt er gar nichts mehr. Am oberen Panelrand klappt das übrigens hervorragend, da wird dann halt nur noch der "halbe" Text angezeigt.
Eine zweites, (für mich) äußerst merkwürdiges Symptom hab ich in nem anderen Zusammenhang erlebt. In diesem Projekt hab ich insgesamt vier Renderkontexte (drei auf Panels und einer innerhalb eines Frames), die verwaltet werden. Die drei auf den Panels werden synchron durch ein Timer-Ereignis gezeichnet, das Frame zeichnet sich selbst unabhängig von den andern, wenn es nötig ist (also z.B. bei Paint-Ereignissen). Die Kontexte greifen jedoch auf die selben Texturen zurück und sind daher über wglShareLists aneinander gebunden.
Jetzt ist es mir schon ein paar mal passiert (genauer Auslöser unbekannt, es wurde jedoch immer verhältnismäßig oft auf den Frame-Kontext gezeichnet), dass das Frame-Panel plötzlich für kurze Zeit (vielleicht 5s) weiß wurde. In dieser Zeit hat sogar Winamp aufgehört zu spielen (sehr bedauerlich), die Standart-Windows-Funktionen (Startleiste & Co) liefen aber noch. Ich hab während dieser Zeit (bei jedem Render-Vorgang) auch mal die GL-Fehler abfangen lassen, waren aber keine da (Programmfehler auch nicht).
Zweimal ist es sogar schon vorgekommen, dass sich während diesen fünf Sekunden die drei anderen Kontexte abgeschaltet haben. Sie haben dann nur noch schwarz (Hintergrundfarbe) angezeigt, auch als der Frame schon wieder aktiv war und ganz normal weitergearbeitet hat.
Ich hab zwischenzeitlich auch schonmal den Rechner neu gestartet, es kommt aber leider immer mal wieder vor .
Hat vielleicht jemand von euch ne Idee, wo ich da anfangen könnte, zu suchen?
Ogridi
// Edit: Mir ist grade aufgefallen, dass bei dieser "Alles-Wird-Schwarz"-Effekt unabhängig von dem anderen auftreten kann und dass dann in allen Kontexten nichts mehr angezeigt wird außer Text, also keine Quads und keine LineLoops.
Also ganz ohne Code isses natürlich schwer.
Weil du bei translate sowas wie -1 einsetzt, geh ich mal davon aus, das du nicht im orthagonalmodus bist. vielleicht hilft dir das bei dem ersten Problem
weiter, weil du dann Angaben in Pixel machen kannst/musst.
Zum 2. kann ich dir leider nichts sagen.
gruß
_________________ I'm not the signature, I'm just cleaning the floor...
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Doch man benutzt glTranslate durchaus im Orthomodus. Nur halt nicht zur Positionierung, da kann man auch gleich die Koordinaten angeben. Aber wenn man was dynamisch verschieben will dann schon.
Das mit dem kurzzeitigen ausfall find ich schon recht seltsam. Kanns mir aber auch nicht erklären.
Zu den BitmapFonts: Diese Methode sieht recht ansprechend aus und ist auch verhältnismäßig leicht zu implementieren. Allerdings wirst du feststellen, dass bei längeren Texten deine Framerate brachial zu boden geht. Deshalb solltest du dich schon mal seelisch und moralisch auf texture-Fonts einstellen. Is dann zwar nicht mehr ganz so simple aber trotzdem wohl die bessere Alternative.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Allerdings wirst du feststellen, dass bei längeren Texten deine Framerate brachial zu boden geht. Deshalb solltest du dich schon mal seelisch und moralisch auf texture-Fonts einstellen. Is dann zwar nicht mehr ganz so simple aber trotzdem wohl die bessere Alternative.
Für dieses Projekt reichen die Bitmap-Schriften (hoffentlich ) leistungstechnisch aus. Die Render-Prozedur wird nur bei OnPaint und ein paar ähnlichen Ereignissen aufgerufen und der Text besteht nur aus wenigen Worten. Es wäre aber vielleicht eine Alternative, was dieses Rand-Problem anbetrifft. Man müsste doch auch aus dieser "Liste" Texturen extrahieren können, die man dann bei Programmstart irgendwo speichert!? Weil das wäre mir irgendwie lieber, als eine eigene Schriftart-Grafik herzuzaubern (*schlechter-Grafiker-ist*).
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Das mit dem RasterPos bei negativen Werten ist bekannt und anscheinend auch durchaus so gewollt. Da wird dann kurzerhand das Zeichnen des Textes deaktiviert. Dem kannst du mit dem Befehl glBitmap aber abhelfen. Du musst in diesem Falle nur ein nil für den letzten Parameter übergeben. Die ersten 4 sollten dann auch 0 sein. Für dich also nur die x(y)move interessant. Positioniert auf 0, 0 kannst du damit den Punkt bequem überallhin verschieben. Diese Positionierung ist Relativ.
Das was wglUseFontBitmaps macht sind im wahrsten Sinne des Wortes bitmaps. Also die haben nur 0 und 1 für jedes Pixel gespeichert. Und dann 8 Stück in einem Byte. Extrahieren ist schlecht und selber machen ... ich weiß nicht ob das den Aufwand Wert wäre.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Nö. Spontan nicht. Du könntest aber mal schauen was deine CPU Leistung macht. Evtl kann es auch sein, dass der VCL Thread evtl blockiert wird. Durch was auch immer. Momentan kannst du nur versuchen das Phänomen einzudemmen und zu schauen wann und wie es auftritt. Wenn du die Möglichkeit hast, dann versuch mal das Programm auf einem anderen Rechner zu starten. Evtl ist es nur etwas in deinem System. Was die Sache zwar nur geringfügig besser macht. Aber dann kannste es schon mal weitergeben ohne, dass du dir sorgen machen musst.
Mitglieder in diesem Forum: 0 Mitglieder und 11 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.