Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Alexander hat geschrieben:
noch ein paar Fragen: ist
Code:
tsSetParameteri(TS_RENDERER, TS_RENDERER_OPENGL);
kontextabhängig, oder gilt das für die gesamte textsuite?
Ja. Diese "Einstellung" (internes Objekt) hängt an dem Kontext. Solange ein Font erstellt ist kann das nicht mehr geändert werden. Aber das muss es normal auch nicht.
ja die ttf von einer Datei. Kann ich es auch irgendwie aus einer Ressource laden, ohne die Datei seperat auf die Festplatte zu schreiben? Also kurz: Kann ich die ttf auch aus einem Ressourcen-Stream laden?
Du arbeitest doch unter Linux? Kann Linux überhaupt Resourcen? Es ist aber so, dass ich nur mit externen Bibliotheken arbeite und da kann ich nur das machen was die unterstützen. Aktuell gibt es für Linux nur die SDL_ttf. Aber selbst unter Windows wären Resourcen nicht ganz so einfach. Das Einfachste ist ein freies Font irgendwo zu deinem Projekt dazu zu packen.
Alexander hat geschrieben:
Zitat:
Nein. Die Klasse TFont kannst du nicht benutzen.
Schade, denn die ist ja in fp plattformunabhängig. Oder irre ich mich jetzt?
Die Klasse TFont unter Lazarus kenne ich leider so gar nicht. Ich biete keine Unterstützung für solche eine Klasse. Denn die Bibliothek ist auch für DLLs/SOs ausgelegt. Was speziell für C/C++ gedacht ist. Und deswegen werde ich so etwas auch nicht anbieten können. Unter Windows kappselt ein TFont aber auch nur das was ich intern schon machen muss.
Alexander hat geschrieben:
Zitat:
Unter Linux kommst du im SDL_ttf erst einmal nicht umher.
hmm was ist SDL_ttf? Kann ich nicht ohne SDL auskommen? (ich will mich nicht mit noch einer Biblothek beschäftigen....) Ich will doch "einfach" (wenn es das bloß wäre ) Text ausgeben. (aber halt mit umlauten)
Also genau genommen solltest du dich um SDL_ttf nicht kümmern müssen. Denn ich brauch nur irgendeine Bibliothek die mir Bildchen von Zeichen zur Verfügung stellt. Und der Rest sollte alles komplett intern passieren. Also genau genommen musst du nur SDL einstellen und der Rest sollte gehen.
Alexander hat geschrieben:
Zitat:
Ich habe FreeType2 noch auf meiner Liste
Was ist FreeType2?
FreeType2 ist eine Bibliothek die in Linux verwendet wird um Text auszugeben. Damit könnte ich auch meine Bilder der Zeichen erstellen lassen.
Ist die plattformunabhängig? Weil wenn nicht bringt sie mir nichts.... EDIT: http://wiki.lazarus.freepascal.org/FPC_and_SDL ahh ja scheint so... aber leider erst ein beta (also die fpc header)
Lossy eX hat geschrieben:
Du arbeitest doch unter Linux? Kann Linux überhaupt Resourcen?
Nichts einfacher als das in Lazarus (ganz im gegensatz zu Delphi): in initialization {$I xyz.lrs} und auslesen mit LazarusResources.Find('Version').Value (kein kompliziertes stream-erstellen)
Lossy eX hat geschrieben:
Die Klasse TFont unter Lazarus kenne ich leider so gar nicht.
ist da (in Graphics):
Code:
TFont = class(TFPCustomFont)
Lossy eX hat geschrieben:
Also genau genommen musst du nur SDL einstellen und der Rest sollte gehen.
hmmm also in uses sdl und das:
Code:
if tsInit(TS_INIT_SDL_TTF) = TS_TRUE then
Writeln('Initialing SDL_ttf : OK')
else begin
Writeln('Initialing SDL_ttf : FAILED');
ErrorHalt;
end;
Reicht das oder muss ich auch die prozuedure Init_SDL;, die du in deinem Beispiel SimpleBlock genutzt hast reinkopieren?
Muss ich sdl benutzen? Sehe ich deswegen noch keinen Text bei meinen Versuchen?
_________________ "Weil", so schließt er messerscharf,
"nicht sein kann, was nicht sein darf."
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Resourcen: Da muss ich erst mal schauen was die Bibliotheken alles mit machen. Ich werde mir das notieren und später noch mal aufgreifen. Zu mal es mit einer externen Datei absolut kein Problem ist. Deswegen würde ich wenn dann nicht zu früh damit rechnen.
SDL_ttf: Du müsstest die Unit SDL gar nicht einbinden. In der TextSuite habe ich selber einen Header eingebaut. Selfcontaining halt.
Code:
tsInit(TS_INIT_SDL_TTF)
Und dann solltest du es verwenden können. Wobei ich mir nicht ganz 100%tig sicher bin. Evtl. könnte es Probleme geben, weil ich nicht genau weiß ob ich das alles so richtig initialisiert habe. Muss ich ehrlich gestehen.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Wenn du einen Fehler bekommst, dann bitte bitte IMMER den Fehler mit angeben. Denn der dürfte in deinem Falle TS_INVALID_ENUM sein. Mit der Methode tsGetErrorFunction kannst du erfragen welche Funktion als letztes den Fehler gesetzt hat. Und von da aus sieht man direkt wo das Problem liegen könnte. In deinem Falle bei tsFontCreateCreator. Auf den Funktionsseiten ist immer unten eine Liste mit möglichen Error Codes und deren Ursachen zu finden.
In deinem Fall hast du vergessen den Creator auszuwählen. Zu mindest sehe ich das irgends. Das solltest du vor tsFontCreateCreator machen. Bzw wenn du es nicht verändest (was vermutlich üblich ist), dann direkt ein Mal nach dem Creator.
Code:
tsSetParameter(TS_CREATOR, TS_CREATOR_SDL);
Oben drein sehe ich gerade noch etwas anderes. Wenn du im Blockmode bist, dann musst du diesen auch wieder mit tsTextEndBlock beenden. Je nach VALIGN kann es sein, dass erst am Ende des Blocks gezeichnet werden kann. Und 20 als Höhe und Breite + Word Wrap sind auch ein bisschen gefährlich. Denn per Default wird so vermutlich nach dem ersten Wort automatisch umgebrochen und alle Zeilen die vollständig außerhalb des Blockes sind werden geclipped.
Leider sehe ich keinen Text, dafür aber wird meine gesamte OpenGL zeichenfläche deutlich dunkler. Also das, was ich sonst so male, wird, als hätte ich die Farbwerte alle halbiert. Wenn ich
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Also das mit der halbierten Helligkeit könnte daran liegen, dass ich eine Textur binde und sie aktiviere. Die ist nach dem Rendern weiterhin aktiv und wird auf deine Flächen aufgetragen. Also ein mal kurz folgendes und die Textur ist nicht mehr aktiv.
Code:
glDisable(GL_TEXTURE_2D)
Zum nichts sehen. Ich habe bei den Samples eine Demo die nennt sich "EnumFonts". Starte die bitte mal. Evtl auch mal selber kompilieren und starten. Würde mich mal interessieren ob die so funktioniert. Die sollte entsprechende Systemverzeichnisse einlesen und die gefundenen Fonts + Namen ausgeben. Im Zweifel poste auch bitte mal deinen Code.
PS: Die Bibliothek befindet sich noch in der Entwicklung und 64 Bit und Linux sind auch für mich ein bisschen Neuland. Deswegen entschuldige ich mich für solche Unannehmlichkeiten schon mal. Ich hoffe aber einfach mal, dass das alles bloß kleinigkeiten sein werden.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Diese andere Anwendung diente nur dazu um zu testen ob SDL_ttf so überhaupt geht. Denn dort wird wirklich nur SDL_ttf angesprochen um die Fonts zu öffnen und sich den Namen geben zu lassen und da dort viele viele Namen in der Datei steckten gehe ich davon aus, das SDL_ttf auch so geht wie ich mir das vorgetsellt habe.
Die Zeichenreihenfolge der Punkte ist genau wie bei dir. Ich zeichne aber auch nur ganz simple Quads. Evtl könnte am Tiefentest liegen, da sie beide die gleiche Tiefen haben werden. Bzw im SingleLine Modus ist die Baseline (die Linie auf der Buchstaben liegen) die Y Position 0. Also sollte der Text an der Oberkannte des Quads liegen. Blending hast du ja auch aktiviert, oder?
Sonst müsste ich so passen. Ich habe bin aber gerade dabei mir Fedora 9 64 Bit in einer VM zu installieren. Evtl hängst du mir mal bitte dein ganzes Projekt an bzw. schickst es mir per Mail. Die Adresse ist auf der Teamseite zu finden. Dann schau ich mir das selber mal an.
nein blending habe ich nicht aktiviert, jedenfalls nicht wenn ich den text zeichne.
Code:
glEnable(GL_BLEND);
vor dem text zeichnen und deaktivieren nach dem text zeichnen bringt leider auch nichts.....
Der tiefentest ist es nicht, da es ebenfalls mit z=-1 nicht klappt. Außerdem ist das quad ganz klein und sollte maximal nur den ersten buchstaben abdecken.
Das Projekt ist eigentlich ein 2D Projekt, ich benutze den teifentest aber trotzdem, da es sehr komfortabel ist. falls es hilft dies führe ich aus beim resizen:
Code:
glMatrixMode(GL_PROJECTION); { prepare for and then }
glMatrixMode (GL_MODELVIEW); { back to modelview matrix }
glViewport (0,0, Width, Height); { define the viewport }
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LESS);
das Programm ist (für meine Verhältnisse) gewaltig und recht komplex. Zusammen dürfte es mindestens sowas um 7000 Zeilen haben. (und eine eigene OpenGL Chart Klasse, klappt ganz gut...) Deswegen ist es wohl viel zu viel Arbeit für dich da den fehler zu finden. (zudem bin ich mir noch nicht sicher unter welche Lizenz (freewazre oder opensource) ich es stellen will).
Was ich machen kann ist folgendes: Ich könnte ein neues Projekt erstellen (ebenfalls mit der OpenGLControl) und versuchen da Text zu zeichnen. Dort könntest du dann auch schnell reinschauen... Soll ich das machen? (Kann aber 2..3 Tage dauern da ich einiges zu tun habe... unter anderem beschäftige ich mich mit synapse für Updates... (und 100 andere Bugs))
Gruß Alexander[/code]
_________________ "Weil", so schließt er messerscharf,
"nicht sein kann, was nicht sein darf."
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Och also über die Größe würde ich mir mal keine Sorgen machen. Die Fonts haben ca 12500 Zeilen Code (+ Codepages). Und ich habe häufig genug mit wirklich großen Projekten zu tun. Du kannst es mir per Mail zuschicken mit dem Hinweise welche Datei + ungefähre Zeilenangabe und den Rest finde ich dann schon. Ich will ja nicht alles studieren sondern nur den Fehler suchen. Das passt schon.
Ich werde es dann auch entsprechend vertraulich behandeln so kannst du dir immer noch überlegen was du später damit machen willst.
ok das ist sehr freundlich. Ich will dir auch nicht zu viel Arbeit machen... (nerve dich ja in diesem Thread schon lange genug.... )
Ich beutze Lazarus 0.9.25 aus dem SVN mit FPC 2.2.0 (hmmm es gibt doch einen neueren wieso ist der nicht in den Ubuntu Quellen....)
EDIT: ahh ist doch die neuste
hmmm ich habe einige Kompos (meine eigenen (alle noch nicht ganz fertig)) verwendet (liegen alle bei):
TMyRollOut TExpandPanels TColoredComboBox TGroupHeader MyWebViewer
gebraucht wird außerdem:
gl, glu, glut, synapse, TextSuite
hmmm das müsste alles sein... du bekommt den quellcode und wo was steht dann per mail.
Nochmals danke für deine Mühe.
Gruß Alexander
_________________ "Weil", so schließt er messerscharf,
"nicht sein kann, was nicht sein darf."
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Nach einigem Hin und Her und reichlich geteste scheint das Problem gefunden zu sein. Es sieht so aus als ob die TextSuite aktuell nicht 64 Bit kompatibel ist (habe es auch nie behauptet oder getestet). Die Erstellung der Zeichen sorgt für Bilder die eine Breite von 0 und eine Höhe von 15 haben. Was ehrlich gesagt ziemlich wenig ist.
Ich werde in den nächsten Tagen mal schauen woran es liegt und versuchen eine halbwegs brauchbare Version für 64 Bit zu machen. Vorerst geht es also nicht für 64 Bit.
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.