Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Lang lang ist es her. Und wie in der Software Entwicklung so üblich hat alles eine andere Wendung genommen als zu Anfang vermutet oder geplannt war. Sehr zur Freude der Platformunabhängigkeit hat alles einen gehörigen Schlag SDL bekommen. Da die Projekte immer noch nicht tot sind will ich mal ein kleines Update bringen.
TextSuite Das dürfte wohl das Interessanteste von Allem werden. Von dem Ursprünglich vorgestelltem externen Programm habe ich mich recht weit verabschiedet und einen neuen Weg gewählt. Der Grund dafür ist recht einfach. Kurz nachdem ich dieses Tool vorgestellt habe ist mir klar geworden, dass ich eine Sache nicht bedacht habe. Und zwar die Fehlende UNICODE Unterstützung. Wenn ich schon etwas von Grund auf neu mache, dann sollte ich dies wenigstens so machen, dass ich es in einem Jahr nicht wieder neu schreiben muss. Und da könnte die Unterstützung von bis zu 65536 Buchstaben (das 256 Fache) durchaus ein geringes Problem darstellen. Da es normal keinen Sinn macht alle Buchstaben von Hause aus zu erstellen werden die Buchstaben erst dann erstellt sobald sie benötigt werden. Um Verzögerungen wärend des Zeichnen zu vermeiden kann man aber zu Begin auch schon einzelne Buchstaben oder Buchstabenbereiche erstellen lassen.
Derzeit basiert die Erstellung der Buchstaben noch vollständig auf SDL. Aber dort eine windowsspezifische Erstellung zu ermöglichen sollte sich recht einfach und unkompliziert gestalten.
Etwas worauf ich recht viel Wert lege und wodurch das alles erst richtig Sinn macht ist das Post Processing der erstellten Buchstaben. Dieses PostProcessing wird direkt nach dem Erstellen eines Fonts definiert und bleibt so lange gültig bis es verändert wird. Durch die Verwendung einer sehr sehr einfachen Klassenstruktur steht es jedem Frei sein eigenes PostProcessing zu schreiben und diese Willenlos miteinander zu kombinieren.
Über die Geschwindigkeit des Erstellens kann ich so noch keine Aussage treffen, da ich die Zeit noch nicht gemessen habe. Ich habe bei meinen Codes vorrangig auch erst einmal auf Funktionalität gesetzt anstelle auf geschwindigkeit zu setzten. Wobei die SDL Funktion zum Erstellen des geblendeten Textes außerhalb meines Wirkungskreises liegt. Aber bei meinen Codes besteht durchaus noch die Möglichkeit etwas zu optimieren.
Folgender Code beinhaltet die Erstellung der Fonts des unten angehangenen Bildes. Das Bild ist aufgrund der Weiterentwicklung der Bibliothek nicht mehr existent oder relevant. Der nachfolgende Code ist nehr mehr aktuell oder funktionsfähig. Er dient lediglich nur noch zur Verdeulichung der Entwicklung, die der Bibliothek wiederfahren ist.
Was mir persönlich noch nicht so gut gefällt ist das Schriftbild. Derzeit stütze ich mich nur auf den Advancewert den ich von SDL bekomme. Aber in meinen Augen sind die Abstände zwischen einigen Zeichen sehr ungünstig. Dafür hatte ich aber schon mal eine Testanwednung geschrieben die dies zu mindest verbessern sollte. Aber das muss ich erst noch im "großen Stil" implementieren und schauen ob mein Plan aufgeht. Aber ich bin recht zuversichtlich.
Aber auch wenn das Ergebniss schon recht brauchbar aussieht ist leider noch sehr viel zu tun um auch ein sinnvolles und brauchbares Handling der Fonts zu ermöglichen.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Um einmal den Updatezyklus von einem Jahr zu durchbrechen gibt es jetzt einmal ein bisschen was zum Anschauen.
In erster Linie habe ich sehr viel an der Schnittstelle gefeilt und da ich die Fonts nun mal der breiten Öffentlichkeit zur Verfügung stellen möchte habe ich mich von meinen Klassen weitestgehend verabschiedet. Zu mindest was die Schnittstelle für den Prgrammierer angeht. Intern verwende ich diese immer noch. Aber nach außen hin ist die komplette Schnittstelle Procedural gehalten. Für mich als OOP Fanatiker eine wirklich schwere Entscheidung. Aber wenn dies zur Verbreitung beiträgt soll es mir recht sein. Alles was irgendwie Delphispezifisch ist wurde durch universelleres ersetzt aber ohne den Programmieraufwand/die Schwierigkeit zu erhöhen.
Desweiteren musste ich alle von mir verwendeten Schnittstellen dynamisch laden. Das was der Smartlinker von Delphi erledigt hat funktioniert in einer DLL aber nicht. Und so kann ich nicht alles mögliche zwingend vorraussetzen. Also müssen zu Begin erst einmal alle benötigten Teile initialisiert werden.
Außerdem habe ich sehr viel Zeit in die Schriftsetzung investiert. Dort unterscheide ich zwei Modis. Die einfache Textausgabe und die Textausgabe in einem Block.
Die einfache Textausgabe kann logischerweise nicht Ansatzweise so viel wie die Ausgabe im Block. Aber für kleine einfache Texte ist das vollkommen ausreichend. In diesem Modus ist es möglich einen Text auszugeben. Dieser wird weder umgebrochen noch kann dieser unterschiedliche Stilelemente beinhalten. Man kann vor der Ausgabe eine Ausrichtung/Farbe/Font festlegen. Die Ausrichtung beeinflusst die Textausgabe anhand der gerade aktuell gesetzten Position.
Die Ausgabe im Block ist etwas komplexer. Aber das Prinzip ist recht. Als erstes teilt man der TextSuite mit, dass man einen Block darstellen möchte, der folgende Ausmaße annehmen darf. Anschließend verhält sich die Ausgabe wie bei der Einfachen nur mit dem Unterschied, dass man beliebig die Fonts/Farben wechseln darf. Und anschließend einen Absatz, ein Wort oder einen Buchstaben in die Ausgabe schickt. Die Ausrichtung allerdings darf man nicht innerhalb eines Blockes ändern. Intern wird der Text dann zerlegt und verteilt. Je nach Modus werden vollständige Zeilen sofort ausgegeben oder erst dann wenn der Text abgeschlossen ist. Der Text wird automatisch oder durch manuelle Zeilenumbrüche umgebrochen. Die Zeilenhöhe pass sich automatisch an die verwendeten Fonts an. Als horizontale Ausrichtung stehen Links, Rechts, Zentriert oder Blocksatz zur Verfügung.
tsTextOut(' (griechisch '#$916#$949#$955#$966#$959#$943' (m. pl.) , altgriechisch Delphoí ausgesprochen, heute Delfí) war eine Stadt im antiken Griechenland, die vor allem für ihr Orakel bekannt war. ');
tsTextOut('Heute gehören die Ausgrabungen von ');
tsFontActivate(FontID3);
tsTextOut('Delphi');
tsFontActivate(FontID2);
tsTextOut(' zur Liste des Weltkulturerbes der UNESCO. Neben den Ruinen des antiken ');
tsFontActivate(FontID3);
tsTextOut('Delphi');
tsFontActivate(FontID2);
tsTextOut(' existiert eine Kleinstadt gleichen Namens.');
tsTextOut(#$D#$A);
tsTextOut(#$D#$A);
tsFontActivate(FontID4);
tsTextOut(pWideChar(LanguagesText));
tsTextOut(#$D#$A);
tsTextOut(#$D#$A);
tsFontActivate(FontID1);
tsTextOut(pWideChar(NyxText));
tsTextEndBlock;
Folgendes werde ich in der nächsten Zeit noch umsetzen. Es sind meistens eher Kleinigkeiten oder aber features die im Verborgenen liegen.
- Vertikale Ausrichtung (Top, Center, Bottom)
- Einzeilige Blockausgabe mit Endellipsis, Abschneiden etc
- Zeilen/Zeichenabstand plus X Pixel
- Einstellbare feste Zeilenhöhe (Inklusive Baseline)
- Generelles Offset innerhalb des Rechteckes um Skrollen zu ermöglichen
- Einrückung des ersten Wortes
- Zeilenhöhe von Leerzeilen (verringerte Höhe wie im Firefox)
- Hoch/Unterstellen von Texten
Und alles was sonst noch Sinn macht/machen könnte.
Zuletzt geändert von Lossy eX am Mo Jan 05, 2009 10:38, insgesamt 1-mal geändert.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Eigentlich hat sich nicht allzuviel getan was man unbedingt anpreisen müsste aber ich möchte euch das trotzdem nicht vorenthalten. Ich habe implementiert, dass man Fonts über die Windows GDI erstellen lassen kann. Dabei gibt es 2 Möglichkeiten. Entweder über den Fontnamen also "Tahoma" oder über die Möglichkeit direkt eine Datei angeben zu können. Wie man das bei SDL gewohnt ist. Leider bin ich dazu gezwungen eine undokumentierte Funktion von der GDI benutzen zu müssen, da ich sonst keine andere Wahl habe mir den Namen einer TTF Datei geben zu lassen. Außer ich habe das dringende Bedürftniss direkt die Datei zu parsen. Das habe ich aber nicht. Evtl später noch zusätzlich als Fallback.
Ansonsten habe ich recht viel Zeit in die Textsetzung investiert. Und damit bin ich derzeit auf einem Stand der sich durchaus sehen lassen kann. Bei den Abständen zwischen den Buchstaben gibt es mittlerweile kaum noch Ausreißer. Das Schriftbild wirkt harmonisch und lässt sich selbst bei kleinen Fonts ohne Anstrengungen gut lesen.
Auf dem Bild enthalten ist vor allem eine Gegenüberstellung von SDL und GDI. Dort habe ich 5 verschiedene Schrift/Stil-kombinationen ausgewählt. Besonders spannend ist das Tahoma (4te Gruppe). Wärend bei Arial ein direktes kursives Font existiert ist das bei Tahoma nicht der Fall. In diesem Falle muss SDL (FreeType) oder die GDI das Font selber neigen. Bei SDL sieht man in solch einem Fall sehr schön, dass immer wieder Buchstaben dabei sind die etwas aus dem Rahmen fallen. Das ist leider auch der Fall, wenn ich einen Text direkt mit SDL rendern lasse. In diesem Beispiel geht es aber noch. Habe ich schon schlimmer gesehen. Der GDI scheint so etwas nichts auszumachen. Denke aber das liegt an SDL_ttf. Ich möchte aber FreeType2 auch in echt unterstützen.
Sonst haben sich nur kleinere Sachen oder interne Veränderungen ergeben. Texte können automatisch Vertikal ausgerichtet werden. Die Buchstabenbilder werden alle an einer zentralen Stelle auf die Texturen verteilt und dort habe ich es jetzt so gemacht, dass sich alle Fonts die gleiche Textur(en) teilen. 4-8 Fonts der Größe wie auf dem Bild sollten dabei problemlos in eine 512x512 große Textur passen. Selbst dann noch wenn man den kompletten Ansischriftsatz (255 Zeichen) erstellt.
Zuletzt geändert von Lossy eX am Mo Jan 05, 2009 10:38, insgesamt 1-mal geändert.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Als erstes einmal vorweg. Dieses mal gibt es kein Bild sondern nur harte Fakten.
Der Support für Windows 9x Betriebssystem wird irgendwann mal dafür sorgen, dass ich graue Haare bekomme. Auf der anderen Seite möchte ich auch nur ungern auf die Unterstützung der GDI verzichten. Ein Teufelskreis sozusagen.
Meine undokumentierte Funktion die mir anhand einer Datei einen Fontnamen gibt kann ich leider doch nicht benutzen, da diese unter 9x zwar existiert aber mir jeglichen Dienst verweigert. Also darf ich die TTFs selber einlesen und muss mir den passenden Namen raussuchen. Der muss leider zur Sprache des Systems passen sonst gehts nicht.
Um nicht den gleichen Fehler wie die GDI zu machen habe ich die Möglichkeit eingebaut sich den Namen, Stylenamen und wenn vorhanden die Kopierrechte eines Fonts zurückgeben zu lassen.
Für 9x muss ich auch meine Unicodezeichen in den Index der Glyphe, mit Daten aus dem Font, umrechnen. Unter NT gibt es zwar eine Methode die das kann aber leider nicht unter 9x. Das ist zwar größtenteils schon umgesetzt. Aber es fehlen noch 1-2 Stellen an denen eine wilde Berechnung noch nicht ganz funktioniert.
Die Erstellung der Zeichen mit der GDI habe ich auch ungestellt, da ich sonst zu stark den Einstellungen des Systems ausgeliefert war. Wenn im System ClearType aktiv war habe ich unweigerlich Text mit ClearType bekommen. Was aber wiederrum auf Grau gerechnet einfach nur matschig aussieht. Derzeit bekomme ich selbst auf 98 sauber und scharf geglättete Schrift. Und das bei jeder Schriftgröße (Sofern das GDI Hinting nicht versagt). Außerdem wird jetzt nichts mehr von den Zeichen abgeschnitten. Das war vorher auch der Fall. Leider verweigern Symbolschriftarten wie Marlet, Webdings, Windings derzeit vollständig den Dienst. Die GDI wirft mir immer Arial vor die Füße. Keine Ahnung warum.
Damit der ANSI Standard sinnvoll unterstützt wird habe ich ca 40 (Single Byte) Codepages umgesetzt. Die Codepage kann man jederzeit via SetParameter einstellen. Mac codepages fehlen derzeit noch komplett aber die werde ich nach und nach nachrüsten. Double Byte Codepages wie Big5 (Chinesisch traditionell) werde ich evtl später nachrüsten. Aber aufgrund der recht großen Größe dieser Codepages bin ich da noch etwas unentschlossen.
Sollte ein Zeichen nicht existieren wird immer das im Font definierte Defaultchar benutzt. Da das auch ein Unicodezeichen sein könnte ist das wohl die nächste Stelle die ich manuell parsen darf. Das sollte aber nicht so tragisch sein.
Für die Speicherverwaltung denke ich, dass ich da mittlerweile eine ganz gute Lösung gefunden habe. Ich werfe zwar mit Pointern nur so um mich aber die Geschwindigkeit und eine Speichernutzung von 88-92% bei reelen Fontgrößen spricht für sich. Auch ein Dauertest, bei dem zufällig die gleiche Anzahl an Zeichen gelöscht und hinzugefügt wurden, verlief ganz gut. Eine übermäßige Zerstückelung der Daten ist nicht aufgetreten. Das Ganze existert derzeit nur in einer Testanwendung bei der nur mit virtuellen Daten gearbeitet wird. Dafür wird aber alles Grafisch ausgegeben.
Sonst gab es eher nur Kleinigkeiten und Char und Line Spacing.
Sollte interesse an der Speicherverwaltungsdemo bestehen kann ich diese später auch mal hochladen. Unter Umständen auch mit Code.
Zuletzt geändert von Lossy eX am Mo Jan 05, 2009 10:40, insgesamt 1-mal geändert.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Es ist mal wieder Zeit für das monatliche Update.
Das Texturmanagent ist vollständig implementiert und war bei meinen Test stabil und auch so schnell wie ich es erwartet hatte. Die Texturgröße ist einstellbar und steht per default auf 256x256.
Einzelnen Buchstaben können auch wieder gelöscht werden
Als Codepage steht jetzt auch UTF-8 zur Verfügung
Bei den Fonts kann erfragt werden ob es sich um Fixed Width Fonts handelt. So etwas wie Courier New.
Bei der Ausgabe im Block werden per Default keine Zeilen mehr dargestellt die außerhalb des Blockes liegen. Die Zeilen aber immernoch vollständig.
Die Höhe und Breite des Textes lässt sich sinnvoll in Erfahrung bringen. Sowohl für kleine einfache Texte als auch für Komplexe im Blockmodus.
Für den Blockmodus kann man ein X und Y Offset angeben. Damit kann man den Text scrollen ohne das Clipping zu gefährden oder sonstige Pfuschlösungen.
Der Ein oder Andere aus dem IRC kenn das schon so ähnlich aber hier mal eine aktualiserte Version von einer Testanwendung wo man etwas damit rumspielen kann. Die Demo basiert auf der VCL und ab Windows NT sollte es keine Probleme. Unter 9x geht die GDI noch nicht so ganz.
[edit] Link entfernt [/edit]
Was für die Meisten wohl wesentlich interessanter sein dürfte. Ich denke wenn ich das nächste Mal etwas dazu veröffentliche, dann wird eine Betaversion enthalten sein.
Zuletzt geändert von Lossy eX am Mo Jan 05, 2009 10:40, insgesamt 2-mal geändert.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Wie ich im letztem Post angekündigt habe gibt es beim nächsten Mal Code. Also jetzt.
Ein paar Anmerkungen zur Bibliothek. Es handelt sich dabei um eine Betaversion. Allerdings hat das Ganze noch keine Version. Und das aus gutem Grund. Denn falls die Struktur oder die Namen auf breite Ablehnung stoßen sollten dann kann ich das noch entsprechend anpassen. Und ein paar Stellen sind auch noch nicht ganz fertig. Diese Stellen aber keine große Einschränkung dar.
Folgende Dinge müssen für die Version 0.8 noch getan werden.
- Qualitätsverbesserung des Shadow und Border PostProcessors
- tsImageBlur muss noch implementiert werden
- Header für C/C++
- vollständige Hilfe der bestehenden Quellen (englisch)
- Bugfixing?? (Neeeeee )
Ein paar Worte zum generellen Aufbau. Es ist eine OpenGL ähnliche Schnittstelle und auch der Aufbau könnte selbiges Vermuten. Als Allererstes müssen externe Biblioheken initialisiert/geladen werden. Das geschiet mit dem Aufruf von tsInit. Danach wird in jedem Fall ein Kontext benötigt. Dieser muss erstellt und gebunden werden. Ein Kontext ist wie bei OpenGL an einen Thread gebunden. Anschließen muss ein Renderer eingestellt werden. Es stehen TS_RENDERER_OPENGL und TS_RENDERER_NULL zur Verfügung. Das Ändern eines Renderers wärend Fonts existieren ist nicht zulässig. Danach muss derzeit ein Creator angegeben werden. Also SDL, GDI oder GDI mit dem Schriftnamen.
Code:
if tsInit(TS_INIT_OPENGL or TS_INIT_SDL_TTF)= TS_TRUE then
// OK
else
// Failed
tsContextCreate(@gContextID);
tsContextBind(gContextID);
tsSetParameteri(TS_RENDERER, TS_RENDERER_OPENGL);
tsSetParameteri(TS_CREATOR, TS_CREATOR_SDL);
Ist das alles erfolgreich gewesen, dann steht der Textausgabe nichts mehr im Wege. Dann muss ein Font erstellt werden und gebunden werden. Ein Font ist aber zwingend an einen Kontext gebunden.
Alles Andere ergibt sich hoffentlich von alleine. Aber dafür biete ich auch reichlich Beispiele an. Ich verzichte derzeit auch bewusst auf mehr Dokumentation um zu sehen wo entstehen Probleme wenn das erste Mal damit zu tun hat.
Feedback ist ausdrücklich erwünscht. Besonders wenn es um die Handhabung, Ungereimtheiten oder einfach irgendwelche seltsame Verhalten geht. Denn ich habe versucht die Schittstelle so einfach wie möglich zu gestalten. Und ich weiß nicht ob mir das überall gelungen ist. Positives Feedback ist aber auch gerne willkommen.
Downloadlink im ersten Post.
Roadmap Version 0.9
- Unicodekomplatiber Textparser
- Right to Left Schriften
- Flags für Blockausgabe
- Tabulatoren
Version 1.0
- Verschiedene Texturformate
- Kerning
- Große Buchstaben zerlegen
- Streaming von Fonts
Zuletzt geändert von Lossy eX am Mo Jan 05, 2009 10:42, insgesamt 1-mal geändert.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Leider bin ich mit der Hilfe noch nicht so weit wie ich es gerne hätte aber dafür habe ich den Code jetzt auf einem Stand den ich so als 0.8 freigeben kann. Von möglichen Bugfixen mal abgesehen. Dadurch, dass die Hilfe noch nicht so weit ist bleibt die Versionsnummer 0.0.0 aber weiterhin erhalten.
Änderungen an der Schnittstelle.
Das Wichtigste zu erst. In einer Linux library (*.so) werden die bibliotheksinternen Strukturen nicht automatisch initialisiert. Dies muss nun ÜBERALL ZU ERST manuell via tsInit(TS_INIT_TEXTSUITE) geschehen. ACHTUNG. Die Initkonstanten haben sich verschoben.
Die Bibliothek kann mit dem Aufruf von tsQuit komplett beendet und freigegeben werden.
Funktion tsFontCharAdd wurde zu tsFontAddChar
Funktion tsFontCharAddChars wurde zu tsFontAddChars
Funktion tsFontCharAddRange wurde zu tsFontAddCharRange
Funktion tsFontCharDelete wurde zu tsFontDeleteChar
Funktion tsFontCharDeleteChars wurde zu tsFontDeleteChars
Funktion tsFontCharDeleteRange wurde zu tsFontDeleteCharRange
Funktion tsFontCharGetParameteri wurde zu tsFontGetCharParameteri
Funktion tsFontCharGetParameteriv wurde zu tsFontGetCharParameteriv
Funktion tsFontCharSetParameteri wurde zu tsFontSetCharParameteri
Funktion tsFontCharSetParameteriv wurde zu tsFontSetCharParameteriv
Funktionen tsFontPostAdd* wurden zu tsPostAdd*
Die Fontkonstante TS_FONT_* wurden reorganisiert. ACHTUNG: Die Werte haben sich verändert.
tsPostAddKerning wurde entfernt, da sie derzeit keine Auswirkung hat.
Sollte ein Wert nicht gesetzt sein, so liefert tsGetString nil anstelle eines leeren Strings zurück
Mit dem Parameter TS_FONT_FILE_STYLE können die Stile der Datei erfragt werden (für Creator). TS_FONT_STYLE dient jetzt dazu um den Stile zu erfragen mit dem das Font erstellt wurde. Bei SDL_ttf bekommt man keine Dateistile, da SDL_ttf die Stile der Fontdatei nicht zurückliefert.
Features
Header zum statischen Einbinden der DLL in C/C++ erstellt + 1 SDL Beispiel.
Mit der Funktion tsCharOutW können einzelne Zeichen dargestellt werden. ACHTUNG: Es finden aus Geschwindigkeitsgründen keine Sicherheitsüberprüfungen statt!
tsImageBlur ermöglicht es tsImages weich zu zeichnen. (Gaußscher Weichzeichner)
Der Custom PostProcessor verfügt nun über einen Data Pointer
Die Qualität des Border PostProcessors wurde erhöht und um einen Schärfeparameter (Bereich 0-1) erweitert. Ist etwas optimiert aber bei einer Schärfe von 0 nicht wirklich schnell.
Der Shadow PostProcessor benutzt die gleiche Funktionalität wie tsImageBlur. + Zusätzlicher Optimierung
Es kann für jeden Kanal seperat ein Modus (TS_MODE_REPLACE, TS_MODE_MODULATE) eingestellt werden. Dieser wird in tsImageFill* und tsPostAddFill* zum Füllen benutzt. Der Modus wird via tsSetParameter gesetzt.
Mit dem Parameter TS_CONTEXT_BINDING und TS_FONT_BINDING kann der aktive Kontext bzw das aktive Font erfragt werden.
Das Rendern wurde um ca. 12% beschleunigt.
Es ist möglich die FontID 0 zu binden um kein aktives Font mehr zu haben.
Wird ein gebundenes Font gelöscht wird jetzt auch die Bindung aufgehoben und das aktive Font auf 0 gesetzt.
Bekannte Probleme / Todo ( 0.8 )
So wie es scheint geschehen unter Linux beim statischen Linken seltsame Dinge. Was zur Folge hat, dass unter Linux derzeit die Devel packages von externen Bibliotheken benötigt werden. Das sollte natürlich später nicht der Fall sein.
Der Parameter AutoExpand bei tsImageBlend wird derzeit noch ignoriert. Es wird momentan immer expandiert, wenn es nötig ist.
Natürlich die Hilfe. Aber die ist in arbeit.
Donwloadlinks im ersten Post.
Zuletzt geändert von Lossy eX am Mo Jan 05, 2009 10:43, insgesamt 1-mal geändert.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Laut meiner Planung hatte ich knapp 3-4 Wochen für die Dokumentation angesetzt. Nun ja. Das Ende ist bereits vor knapp 3 Monaten verstrichen und die Dokumentation ist leider immer noch nicht fertig.
Ich wollte eigentlich erst wieder Quellen veröffentlichen, wenn die Dokumentation auch fertig ist. Allerdings da in den existierenden Quellen einige teils gravierende Fehler enhalten sind gibt es doch noch mal eine Zwischenversion. Außerdem sind doch noch ein paar notwendige Features hinzugekommen.
Features
Funktion tsStringAlloc zum Erstellen leerer Strings
Funktion tsPostDelete zum Löschen von Post Processoren
Funktion tsPostClearUsage zum Löschen der Usages eines Post Proccessors
Funktion tsGetErrorFunction zum Feststellen welche Funktion den letzten Fehlercode ausgelöst hat.
Garbage Collection für externe Strings (tsStringAlloc und tsStringAnsiToWide erstellte Strings werden beim Beenden der Bibliothek freigegeben)
Fontstyle Unterstrichen und Durchgestrichen. Funktioniert auch im Block Modus.
Die Linuxvariante lädt zu erst Debug und dann die Releaseversionen der SDL Bibliotheken
Zusätzlich habe ich einige Fehler beseitigt. Eine vollständige Liste davon findet sich im Change Log meines Bugtrackers. Die Issues laufen allerdings bereits unter Version 0.8. Aber es war eigentlich nicht geplannt das da noch eine Zwischenversion erscheint deswegen wird sich das Log nur erweitern, was unter umständen später etwas verwirrend wirkt.
Downloadlink im ersten Post.
Die Dokumentation habe ich soweit auch schon online gestellt. Auf der Downloadseite befinden sich auch 2 Pakete die einmal die version enthalten die online zur Verfügung steht und ein Mal eine chm version der Dokumentation.
Aber bitte nicht zu genau nehmen. Die Dokumentation befindet sich noch im Aufbau. Einige Artikel sind noch nicht fertig und andere will ich noch mal überarbeiten. Bzw muss das ganze noch korrektur gelesen werden und auf Sinn überprüft werden.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Ich habe alle Beiträge über die TextSuite vom ursprünglichen Thema abgetrennt und daraus ein neues Thema gemacht. Im gleichen Atemzug habe ich das Meinungsthema getrennt und alle Links in den Beiträgen angepasst. Die Links auf die Bilder und die Downloads wurden entfernt. Der einzige gültige Downloadlink befindet sich im ersten Thema. Ebeneso ein Link auf eine Gallery. Diese ist aber noch ziemlich leer und besteht nur aus einem weiteren Link auf eine Verzeichnissansicht. Das werde ich aber noch anpassen und eine vernünftige Gallery mit Bildbeschreibungen erstellen.
Außerdem habe ich beschlossen, dass die Arbeiten an der Version 0.8 abgeschlossen sind und ich diese gestern freigegeben hat. Entgegen meiner Ankündigen hat sich aber doch noch einiges geändert.
Doppeltes Initialisieren mit tsInit führt nun nicht mehr zum Verlust von sämtlichen Daten. Die Bibliothek verfügt nun über eine anständige Referenzzählung. tsQuit sollte aber nun genau so häufig aufgerufen werden wie tsInit mit dem Paramater TS_INIT_TEXTSUITE.
Es ist nicht mehr möglich einen TextSuite Kontext in verschiedenen Threads zu binden. Bedeutet aber auch, dass ein Kontext der in einem freigebeben Thread gebunden ist nicht mehr benutzt werden kann. Dieser ist für sämmtliches Binden/Löschen gesperrt.
Die Position innerhalb von OpenGL wird nicht mehr verändert. Das bedeutet es ist nicht mehr nötig die Aufrufe mit PushMatrix/PopMatrix zu kappseln. Das erleichtert das Handling für den Entwickler und ist mitunter auch knapp 20% schneller als vorher. Und für VBOs wird so etwas allemal benötigt.
Zum Laden von Bildern mittels tsImageLoad muss nun vorher auch erst einmal eine Bibliothek gesetzt werden. tsSetParameteri mit dem Parameter TS_IMAGE_LIBRARY. Dies ermöglicht später problemlos auch andere Bibliotheken benutzen zu können.
Die Funktionen mit Strings als Parametern wurden umbenannt. Ermöglicht es mir später evtl noch Unicodevarianten davon anzubieten. Bedeutet aber, dass beim Updaten der TextSuite 100%tig Kompilerfehler auftreten werden. Das sollte aber nur eine hand voll Stellen betreffen und durch anhängen von 'A' beheben lassen.
tsGetString -> tsGetStringA
tsFontCreateCreator -> tsFontCreateCreatorA
tsImageLoad -> tsImageLoadA
tsGetErrorString -> tsGetErrorStringA
Die Fonts haben nun richtige Werte für Ascent und Descent. Das vereinfacht das interne Handling und verbessert die Darstellungsqualität beim Mischen von Fonts.
Die Fonts haben einen Wert um die Baseline Vertikal verschieben zu können. Damit ist es möglich Schrift höher oder herunter zu stellen. Interessant für Fußnoten oder Formeln. Dazu gibt es auch 2 Beispiele. Eines auch mit einer Formel in einem Textblock.
Verschiede Speicherlöcher bzw. kleinere Fehler
Der Downloadlink ist ab sofort immer im ersten Post zu finden. Genauso wie auch der Link auf die Beispielbilder.
Außerdem habe ich die Dokumentation soweit fertig gestellt. Diese kann Online betrachtet werden bzw sie ist auch als CHM oder einzelne HTML Dateien downloadbar. Das f.a.q. Kapitel wird mit der Zeit erweitert bzw sollten vermehrt Fragen auftauchen werde ich die einzelnen Artikel entsprechend erweitern.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Ich habe gestern eine Entwicklerversion der TextSuite auf meinen Server geladen.
Obwohl als Version dort schon 0.9.1 dev1 angegeben ist bestehen die Änderungen im Vergleich zur stabilen 0.8 einzig und allein in nur einem Feature. Dieses Feature soll es dem Entwickler ermöglichen die Texte ohne Tricks und ohne Fehler skaliert ausgeben zu können. Das Einzige was man zum Aktivieren tun muss ist den Parameter TS_CREATOR_ADD_RESIZING_BORDER der Creator zu setzen. Wenn dieser Parameter gesetzt ist, dann werden die Texturen alle zukünftig erstellten Buchstaben erweitert und optimiert. Beim Zeichnen wird dann auch speziell darauf reagiert. Dieser Parameter hat keinerlei Auswirkungen auf bereits erstellte Buchstaben. Entsprechend ist es wichtig diesen Parameter frühzeitig zu setzen. Im Idealfall direkt nach der Erstellung. Wenn man die Schriften nicht skalieren möchte sollte man den Parameter nicht setzen, da diese Anpassungen mehr Platz in der Textur benötigen.
Downloads gibt es im Downloadverzeichniss meiner Seite. Die Version "0.9.1 dev1" ist die Gesuchte. Sollte interesse an einem Paketen bestehen in dem die Linux Bibliothek in Binärform enthalten ist kann ich diese noch nachreichen. Die "windows" codes funktionieren aber auch so direkt unter Linux (fpc).
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Nachdem jetzt schon seit ein paar Monaten die "0.9.2 dev1" auf meinem Server lag und ich eine Ankündigung vergessen habe werde ich das jetzt mal nachholen. Der eigentliche Inhalt der Entwicklerversion bestand überwiegend nur aus der Erweiterung um Fonts in 3D vernünftig darstellen zu können. Da das nicht so weltbewegend ist habe ich diese in den Stand 0.8 mit einfließen lassen. Aktuelle Version ist jetzt die 0.8.1. Die 0.9 dev ist somit von meinem Server wieder verwschwunden.
Die Berechnungen für 3D habe ich noch mal umgestellt, da die internen Maße der Glyphen nicht richtig waren. Besonders in 2D kam es dabei zu Verschiebungen.
Außerdem habe ich eine Problem beseitig auf was mich thebubble hingewiesen hat. Die Parameter TS_BLOCK_OFFSET_X und TS_BLOCK_OFFSET_Y waren vertauscht. X wirkt sich jetzt auch tatsächlich auf X aus wärend Y sich auf Y auswirkt.
Zu guter Letzt habe ich die Bibliothek nun für Delphi 2009/2010 fit gemacht. Das sollte jetzt keine Probleme mehr machen.
Downloads gibt es im Downloadverzeichniss meiner Seite. Updates/Aktualisierungen von meiner Seite/Bucktracker werden im Laufe des morgigen Tages folgen.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Da habe ich wohl gestern beim Mergen eine Datei vergessen. Nun ja. Ich habe gerade noch mal die Pakete aktualisiert und jetzt sollte Delphi 2009/2010 wirklich gehen. Alles Andere war davon nicht betroffen.
Mitglieder in diesem Forum: 0 Mitglieder und 4 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.