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

Aktuelle Zeit: So Dez 22, 2024 06:58

Foren-Übersicht » Sonstiges » Meinungen zu den Projekten
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 169 Beiträge ]  Gehe zu Seite Vorherige  1 ... 8, 9, 10, 11, 12  Nächste
Autor Nachricht
 Betreff des Beitrags: Re: TextSuite
BeitragVerfasst: So Apr 22, 2012 22:19 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
Hey,

ich hab nen kleinen Bug. Und zwar werden bei mir bei Unicode-Strings die führenden Leerzeichen nicht mit gerendert. Bei tsTextGetWidthW werden sie aber mitberechnet. Der Fehler tritt mit Lazarus 32- und 64-bit auf.

MfG Bergmann.

_________________
Aktuelle Projekte: BumpMapGenerator, Massive Universe Online
Auf meiner Homepage gibt auch noch paar Projekte und Infos von mir.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: TextSuite
BeitragVerfasst: Mo Apr 23, 2012 10:30 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Bergmann89 hat geschrieben:
ich hab nen kleinen Bug.
Nun. Das muss erst noch bewiesen werden. Nicht Alles was sich nicht so verhält wie man das erwartet muss ein Fehler sein.

Leider fehlen mir da ein bisschen die Randbedingungen um zu erkennen wie du die TextSuite benutzt. Aber ich vermute mal, dass du den Text im Blockmodus ausgibst. Und bei dem ist es so gewollt, dass Leerzeichen am Anfang und Ende einer jeden Zeile unterdrückt werden. Denn in diesem Modus nützt dir eigentlich die Information über die Breite des Textes nicht sonderlich viel. Bzw. ist eine Anforderung dieses Modies eben solche Sachen nicht wissen zu müssen.

Zum Erfragen der aktuellen Position innerhalb eines Blockes müsstest du tsTextGetWidth/Height mit nil als Parameter aufrufen. Dann wird die aktuelle berechnete Größe zurückgeliefert. Natürlich wird nur der Text berücksichtigt der aktuell schon übergeben wurde. Wobei ich gerade nicht genau weiß, ob das mit eine Ausrichtung anders als Oben/Links auch so richtig funktioniert.

PS: Neben den normalen Leerzeichen gibt es auch noch das No-Break Space (Dauerleerzeichen) innerhalb des Zeichensatzes. Ist auch Bestandteil des Ansizeichensatzes. Das wird natürlich nicht umgebrochen oder weggeschnitten.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: TextSuite
BeitragVerfasst: Mo Apr 23, 2012 15:13 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
Ah, OK.
Wenn ich die führenden Leerzeichen durch 0xA0 ersetze, dann gehts. Danke :)

_________________
Aktuelle Projekte: BumpMapGenerator, Massive Universe Online
Auf meiner Homepage gibt auch noch paar Projekte und Infos von mir.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: TextSuite
BeitragVerfasst: Mo Apr 23, 2012 15:50 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Ich wollte mit meiner Erklärung jetzt auch nicht sagen, dass du stumpf die Leerzeichen ersetzen sollst. Sondern schon, dass du dir Gedanken machen solltest was du damit bezwecken willst. Wenn das eine Einrückung am Absatzanfang werden soll. Okay. Genau dafür ist es gedacht. Die vorherige Verwendung von tsTextGetWidthW erzeugt bei mir aber dennoch eine leichte Verwirrung. Denn da Frage ich mich was du damit bezwecken wolltest. Da vermute ich, dass du einzeiligen Text ausgeben wolltest. Wofür wiederrum der Blockmodus nicht ausgelegt ist. Du verstehst mein Dilema?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: TextSuite
BeitragVerfasst: Mo Apr 23, 2012 17:35 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
Hey,

das ganze ist für das Edit bei unserer GUI. Wenn man da paar Leerzeichen und dann erst Text eingibt, dann rendert er das falsch. Das ist zwar dort nur ein einzeiliger Text, aber ich hab trotzdem nen Block genommen, weil ich dann nich mehr viel rechnen muss. So sag ich einfach, das der Block so groß wie das Edit sein soll un der Text vertical zentriert gerendert werden soll. Fertig. Warum selber rechnen, wenn's schon implementiert ist? :mrgreen:
Das tsTextGetWidthW spielt nur eine Rolle, um die Position des Cursors zu ermitteln.

MfG Bergmann.

_________________
Aktuelle Projekte: BumpMapGenerator, Massive Universe Online
Auf meiner Homepage gibt auch noch paar Projekte und Infos von mir.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: TextSuite
BeitragVerfasst: Mo Apr 23, 2012 18:11 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Na ja. Schön ist das sicherlich nicht gelöst. Wenn es nur einzeilig bleiben soll wäre das Sauberste wohl wirklich den Text nur einzeilig auszugeben. Da finden intern auch weniger Berechnungen statt und Leerzeichen bleiben erhalten ohne Manipulationen durchführen zu müssen. Sollte der Text abgespeichert werden muss der ja auch wieder zurück gerechnet werden.
Wenn es später auch mehrzeilig werden soll bliebe da nix anderes übrig. Wobei du dann eh Probleme bekommen würdest, denn da stößt du an die Grenzen des Blockmoduses. Der ist halt eher nur auf Ausgabe ausgelegt anstelle auf Berechnungen innerhalb. Da würde man sich wohl weniger Verrenkungen aufhalsen, wenn man die Zeilen selber zerlegen würde und die Zeilen einzeln im SingleLine ausgibt. Mache da intern auch nix Anderes. + immer die gleichen Berechnungen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: TextSuite
BeitragVerfasst: Di Jul 31, 2012 00:03 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
Hey,

ich hab mal wieder ein kleines Problem mit der TextSuite, wo ich nicht so recht weiter weiß. Und zwar wird der Text auf hellem Untergrund sehr ausgefranst (siehe Anhang; erste Zeile). Wenn ich den Text mehrmals übereinandern render sieht alles 1a aus (siehe Anhang; zweite Zeile). Aber alles doppelt und dreifach rendern ist nicht wirklich ne schöne Lösung. Ich hab auch schonma in die Doku geguckt, aber da find ich auch nich wirklich was, was mir weiter hilft. Gibts da ne Möglichkeit das Problem eleganter zu lösen?

MfG & Thx Bergmann.


Dateianhänge:
text.png
text.png [ 12.89 KiB | 13395-mal betrachtet ]

_________________
Aktuelle Projekte: BumpMapGenerator, Massive Universe Online
Auf meiner Homepage gibt auch noch paar Projekte und Infos von mir.
Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: TextSuite
BeitragVerfasst: Di Jul 31, 2012 09:18 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Also ich würde mal spontan sagen, dass es entweder am Font oder am Renderer liegt, der die Glyphen für die TextSuite erzeugt. Man kann ja recht gut erkennen, dass gerade Linien klar zu erkennen sind und keine Transparenz aufweisen. Nur bei Rundungen wird die Transparenz so übermäßig stark, dass die Pixel kaum noch zu erkennen sind. Von daher denke ich, dass der Renderer die Fonts sehr genau abzubilden versucht oder die Stärke der Fonts scheinbar extrem dünn ist. Dadurch werden wohl bei den Rundungen die Pixel nur 1/10tel des Pixel belegen wodurch es kaum noch sichtbar ist. Die GDI hat spezielle Technicken eingebaut mit denen solche Fälle vermieden werden sollen. Also überprüfe mal ob das Font zu dünn ist, ob es bei anderen Fonts auch auftritt. Und wenn alles nix nützt könntest du da wohl eventuell was mit einem PostProcessor machen. Durch alle Pixel gehen und entsprechend den Alphakanal manipulieren damit dessen transparenz nicht mehr so stark ist. Es sei denn es ist komplett transparent. Das wäre dann vom Effekt her wie doppelt zeichnen. Nur passiert das dann nur einmalig beim Erstellen der Fonts. Aber ich würde erst mal die anderen Sachen versuchen rauszufinden. Denn irgendeinen Grund muss es ja schließlich haben.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: TextSuite
BeitragVerfasst: Di Jul 31, 2012 11:10 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Sieht aus wie falscher Blending-Modus. Versuch mal GL_ONE, GL_ONE_MINUS_SRC_ALPHA.

grüße

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: TextSuite
BeitragVerfasst: Di Jul 31, 2012 12:17 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Für mich sieht das bereits nach GL_ONE, GL_ONE_MINUS_SRC_ALPHA aus. Denn es ist ja nicht die gesammte Schrift davon betroffen sondern nur einzelne Pixel. Bei den Pixeln ist zwar auch zu erwarten das die transparenter sind. Nur sollte das nicht so extrem sein. Dürfte im Übrigen mit schwarzer Schrift auf weißem Grund auch ähnlich sein.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: TextSuite
BeitragVerfasst: Di Jul 31, 2012 12:54 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
Hey,

blending Mode ist (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA). Bei schwarzer Schrift auf weißem Hintergrund tritt der Effekt auch auf, aber da ist es nicht ganz so schlimm. Ich hab zum Test mal das AA der TextSuite deaktiviert. Bis jetzt sieht es gut aus. Mal sehen ob sich da noch irgendwo Nachteile ergeben...

MfG Bergmann.

_________________
Aktuelle Projekte: BumpMapGenerator, Massive Universe Online
Auf meiner Homepage gibt auch noch paar Projekte und Infos von mir.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: TextSuite
BeitragVerfasst: Di Jul 31, 2012 15:24 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Zitat:
GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA

Stimmt. Das ist ja normal der "übliche" Blendmodus. Dann ziehe ich meine Aussage zurück und behaupte das Gegenteil. Ist schon ewig her, dass ich das letzte mal opengl programmiert habe.

AntiAliasing: Das ist nicht das AntiAliasing der TextSuite sondern das des FontRenderers. Die TextSuite macht eigentlich nix anderes als die Glyphen der einzelnen Schriften zu sammeln, zu verwalten und als Quads zu zeichnen. Wenn man von den Effekten absieht.

Nebeneffekte: Da stellt sich jetzt die Frage wie du das gemacht hast. Ob du das nur für das einzelne Font deaktiviert hast oder ob du es gleich Global deaktiviert hast.
- Global: Dann fehlt bei allen Schriften jegliche Kantenglättung. Was in der heutigen Zeit eigentlich nicht mehr Standard ist und weswegen man ja primär zu texturbasierten Schriften gegriffen hat. Und je nachdem wie empfindlich der Benutzer ist mag er das als störend empfinden. Besonders wenn die Schrift größer wird nimmt man das stärker war.
- Einzeln: Das betrifft dann zwar nur eine Schrift. Aber bedeutet auch, dass andere Schriften noch Kantenglättung haben. MIscht man diese Schriften in der gleichen Anwendung (noch schlimmer in der gleichen Szene oder Textblock), dann fällt das recht stark auf. Neben dem Effekt, dass so etwas verwirrend/verstörend wirken kann wirkt es aber laienhaft. Selbst, wenn die Codestruktur genial ist wirkt es zusammengeschustert. Denn die Benutzer sehen nicht den Code sondern nur das Ergebniss.
Weiterer Nebeneffekt: Bei sehr kleinen Buchstaben kann es sein, dass die Buchstaben etwas unförmig werden. Dadurch, dass bei Kantenglättung auch halbe Pixel als Schattierung möglich sind wirken Rundungen wesentlich länger rund als mit vollen Pixeln.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: TextSuite
BeitragVerfasst: Di Jul 31, 2012 22:26 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
Hey,

ich hattes es global deaktiviert. Jetzt hab ich es aber beim erstellen des Fonts deaktiviert. Bei den kleinen Fonts sieht alles perfekt aus. Die von dir beschriebenen Nebeneffekte treten auch nicht auf (mal sehen ob das so bleibt). Sehr große Texte sehen aber - wie erwartet - unsauber aus. Deshalb hab ich mir den Font in ne Klasse gewrappt, sodass ich die Einstellungen relativ schön an und abschalten kann und der Font dann jedesmal neu erzeugt wird, wenn das nötig ist. Da kann ich dann das AA per Hand an oder abschalten.
Vlt findet sich ja dafür später noch ne bessere Lösung, aber so geht es erstmal und liefert die gewünschten Ergebnisse. Danke für die Hilfe :)

MfG Bergmann.

_________________
Aktuelle Projekte: BumpMapGenerator, Massive Universe Online
Auf meiner Homepage gibt auch noch paar Projekte und Infos von mir.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: TextSuite
BeitragVerfasst: Mi Aug 01, 2012 08:22 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Nun ja. Ich habe maximal geholfen zu erkennen was da passiert. Du hast ja deine ganze eigene Problembeseitigung dafür gefunden... Die von mir beschriebenen Nebeneffekte hängen immer vom jeweiligen Betrachter ab. Und da gibt es halt empfindlichere und weniger empfindliche.

[edit] Die globale Einstellung wirkt sich im übrigen auch nur auf Fonts aus die im Anschluss erstellt wurden. Sollte bereits ein Font erzeugt worden sein so wird deren Einstellung natürlich nicht verändert.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: TextSuite
BeitragVerfasst: Mi Aug 01, 2012 10:09 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Dummdidumm, hast du GL_ONE, GL_ONE_MINUS_SRC_ALPHA probiert? ;)

grüße

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 169 Beiträge ]  Gehe zu Seite Vorherige  1 ... 8, 9, 10, 11, 12  Nächste
Foren-Übersicht » Sonstiges » Meinungen zu den Projekten


Wer ist online?

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.

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