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

Aktuelle Zeit: Di Jul 08, 2025 16:05

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 36 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3  Nächste
Autor Nachricht
BeitragVerfasst: So Jan 25, 2015 23:35 
Offline
Compliance Officer
Benutzeravatar

Registriert: So Aug 08, 2010 08:37
Beiträge: 460
Programmiersprache: C / C++ / Lua
@Openglerf
Zitat:
Für mich persönlich wäre eine Bibliothek wie Pango keine Option. Die Dependency wäre mir zu groß. Der Speicherverbrauch zu hoch. Der Initialisierungsaufwand vor dem Rendern zu groß. Perspektive, Animationen und Effekte in der Szene zu umständlich.


Die Dependecy ist gar nicht groß und ist auf ungefähr jedem Linux-like-OS zu finden (=> imo fast jedem ordentlichem OS). Der Speicherverbrauch ist vermutlich nicht signifikant größer als bei deiner Methode und du hast vmtl. kein Hinting, etc.

Und: Was für Perspektive, Animationen und Effekte brauchst du, die nicht mit vorgerendertem Text in einer Textur gehen?

_________________
offizieller DGL Compliance Beauftragter
Never run a changing system! (oder so)


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So Jan 25, 2015 23:40 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
end hat geschrieben:
ist auf ungefähr jedem Linux-like-OS zu finden (=> imo fast jedem ordentlichem OS)
Genau das ist der Punkt. Bei Windoof gibts das alles nicht. Und ich will nicht jedesmal zig MegaByte libs mit ausliefern.
Ein Versuch war's wert. Ich werd mich aber jetzt wieder auf die TextSuite konzentieren. Die kann das fast genauso gut. In manchen Dingen ist sie meiner Meinung nach sogar besser. Ich kann mir den FontLoader (FreeType, GDI, SDL, ...) und den Rendere (OpenGL, OPenGL ES, ...) selbst aussuchen, ohne das ich irgendwas an der Handhabung ändern muss. Die TextSuite macht das alles von allein.

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


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So Jan 25, 2015 23:53 
Offline
Compliance Officer
Benutzeravatar

Registriert: So Aug 08, 2010 08:37
Beiträge: 460
Programmiersprache: C / C++ / Lua
Bei Windows kannst du eine einzelne DLL mitliefern. Das sind Windowsuser sowieso gewöhnt...

Und wieso zur Hölle willst du mehrere FontLoader / Renderer haben? Dein Programm braucht nur eins und mehrere zu supporten ist nur fehlerträchtig. Lieber dafür eine feste Kombination, die bombenfest läuft.

_________________
offizieller DGL Compliance Beauftragter
Never run a changing system! (oder so)


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Jan 26, 2015 01:30 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
Mit einer könnt ich ja leben, aber die Liste wird immer länger:
Code:
  1. libatk-1.0-0.dll
  2. libcairo-2.dll
  3. libcairo-gobject-2.dll
  4. libcairo-script-interpreter-2.dll
  5. libfontconfig-1.dll
  6. libfreetype-6.dll
  7. libgailutil-3-0.dll
  8. libgdk-3-0.dll
  9. libgdk_pixbuf-2.0-0.dll
  10. libgio-2.0-0.dll
  11. libglib-2.0-0.dll
  12. libgmodule-2.0-0.dll
  13. libgobject-2.0-0.dll
  14. libgthread-2.0-0.dll
  15. libgtk-3-0.dll
  16. libiconv-2.dll
  17. libintl-8.dll
  18. libpango-1.0-0.dll
  19. libpangocairo-1.0-0.dll
  20. libpangoft2-1.0-0.dll
  21. libpangowin32-1.0-0.dll
  22. libpng15-15.dll
  23. libxml2-2.dll
  24. zlib1.dll

Und das sind nichmal alle. Zur Zeit scheiterts an der libffi-6.dll und wer weiß was danach noch kommt.

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


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Jan 26, 2015 12:24 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 08, 2010 18:41
Beiträge: 769
Programmiersprache: Gestern
Also wenn ich dich jetzt richtig verstanden habe, willst du einfach nur die verwendeten Glyphen in der Textur speichern. Problem waere halt das unicode zu viele Zeichen hat und der Font ggf. unterschiedliche Metrics?

Wenn ja mach doch einfach eine Hashmap ueber das Zeichen und mehrere B-Baeume. Jeweils ein B-Baum waere dann fuer eine Textur verantwortlich und speichert das Packing. Also im Prinzip wie hier.

_________________
Meine Homepage


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Jan 26, 2015 13:39 
Offline
DGL Member
Benutzeravatar

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

so ähnlich hab ich's jetzt gemacht. Ich hab nen Quad-Tree aufgesetzt, der speichert wo die Textur noch freie Plätze hat. Die Fläche, die der Quad-Tree abdeckt, ist noch frei. Die Kind Knoten werden nur angelegt, wenn diese nötig sind. Das bedeutet, eine leere Textur hat nur den Root-Knoten und eine komplett volle Textur hat gar keine Knoten mehr. Ein Knoten kennt nur seine Kind-Knoten (falls vorhanden), Position und Größe rechne ich jedesmal bei der Rekursion mit (das bischen + und - kostet ja nix, außer bisl Stack-Speicher). So hab ich einen sehr geringen Speicherverbrauch für die Verwaltungs-Strukturen, und kann Glyphen trotzdem schnell und positions-genau einfügen und muss nicht Pixel für Pixel durch die Texture rennen.

€: könnte sein, das der B-Baum die Verteilung der Glyphen etwas besser macht, aber dafür brauch ich auch mehr speicher für die einzelnen Koten. Ich vergleich die beiden mal, wenn meine Implementierung fertig ist.

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  
BeitragVerfasst: Mo Jan 26, 2015 13:58 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 08, 2010 18:41
Beiträge: 769
Programmiersprache: Gestern
Was fuer Speicher, da reicht doch ein short pro Knoten voellig aus.

_________________
Meine Homepage


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Jan 26, 2015 15:29 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
Is richtig, ich sag auch nich, das es Unmengen frisst. Der Unterschied zwischen dem B- um dem Quad-Baum ist folgender:
  • der B-Baum benötigt mit zunehmenden Glyphen im Baum mehr Koten. Der Speicherverbrauch steigt linear mit der Anzahl der Glyphen. Wenn man viele kleine Glyphen hat, dann geht das relativ schnell in den Kilo-Byte Bereich.
  • beim Quad-Tree wird der Speicherverbrauch zwar auch erst steigen umso mehr Glyphen dazu kommen, weil die Tiefe des Baums wächst, aber umso voller die Textur wird, umso weniger Knoten gibt es im Quad-Tree, denn der Quad-Tree deckt nur den freien Bereich ab. Wo die Glyphe liegt und wie groß sie ist, speichert die Glyphe selbst. So hab ich den Speicherverbrauch nur da wo ich ihn wirklich brauch, nämlich in der Textur (es gibts ja u.U. mehrere), die noch nich vollständig gefüllt ist und noch Elemente aufnehmen kann.
Natürlich sind das nur Kilo-Bytes, aber warum Speicher "verschwenden", wenn man es auch ohne Probleme mit weniger hin bekommt.

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


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Jan 26, 2015 18:38 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 08, 2010 18:41
Beiträge: 769
Programmiersprache: Gestern
Jap, wobei ich da eher mit effektiven Unterschied von ein paar Bytes rechnen würde. Von daher denke ich du solltest eher darauf achten wie sich was im Gesamtpaket auswirkt. Wer weiß vielleicht ist auch sogar ein einfaches Array hier die beste Lösung, denn Letter und Digit braucht man schließlich immer komplett... :P

_________________
Meine Homepage


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Jan 26, 2015 19:04 
Offline
DGL Member

Registriert: Do Dez 29, 2011 19:40
Beiträge: 421
Wohnort: Deutschland, Bayern
Programmiersprache: C++, C, D, C# VB.Net
Ich verwende übrigens einen Algorithmus, der dort "Cygon" genannt wird, von hier: https://devel.nuclex.org/framework/wiki/RectanglePacking
Mit den Ergebnissen in Kombination mit teilweiser Sortierung, bin ich relativ zufrieden, auch wenn definitiv noch Optimierungspotential besteht. Dafür ist er in 50 Zeilen implementiert. Ein älteres Beispielbild, das ich gerade zufällig noch herumliegen hatte, habe ich angehängt.


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Jan 26, 2015 22:25 
Offline
Compliance Officer
Benutzeravatar

Registriert: So Aug 08, 2010 08:37
Beiträge: 460
Programmiersprache: C / C++ / Lua
Bergmann:

Wenn du Lazarus mit gtk verwendest (ist wimre Standard) hast du die ganzen Dependecy's so oder so schon...

_________________
offizieller DGL Compliance Beauftragter
Never run a changing system! (oder so)


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Jan 27, 2015 00:35 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
@OpenglerF: Danke, guck ich mir dann mal in Ruhe an.

@end: GTK ist nur unter Linux standard, unter Windows ist es die WinAPI.

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


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Jan 29, 2015 13:41 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
Bei AngelCode werden die Glypheninfos seperat in eine Datei geschrieben, so kann man beschreibung und texturausgabe getrennt in die eingestellten Formate exportieren.
Diese kann man dann z.B. in ein eigenes Format bringen, welches für die Hardware und API am besten geeignet ist.
Bei Texturen z.B. signed distant field mit dxt5 bzw. eine der advanced Erweiterungen, ohne den ganzen dds header gedönst.
Die Beschreibung ist ein Dictionary, welches auf Bytecodes die Glyphen anbietet.
Dort braucht man in der Regel nicht so viel wissen und sollte nicht gerade ISO's vollständig implentieren.

Bei Spielen sind 99% der Probleme, die in Schriftsetzungs, Textprogrammen und ähnlichen hat nicht gegeben.
Einzig schriftrichtung und X/Y Offset sind elementar wichtig.
Viele weitere Informationen benötigt man, wenn man z.B. korrekt Schriftarten mischen will.

Alle Spiele die ich bisher in der Produktion gesehen hab haben die Informationen prebaked geliefert und das Rendering hat nur den X/Y Offset und einige noch Schriftausrichtung enthalten.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Jan 29, 2015 21:42 
Offline
DGL Member

Registriert: Do Dez 29, 2011 19:40
Beiträge: 421
Wohnort: Deutschland, Bayern
Programmiersprache: C++, C, D, C# VB.Net
Dxt5 für Schrift?
Man braucht doch nur einen Kanal, Dxt5 bringt 4 Kanäle mit sich und führt besonders bei Distance Fields möglicherweise zu Artefakten. Da nimmt man doch lieber R8/R16.
"COMPRESSED_RED_RGTC1​" könnte man vielleicht probieren.

Ich persönlich versuche einen hybriden Modus zu implementieren:
Ein Teil der Daten kann voraus generiert werden, aber bei Bedarf will ich auch Zeichen nachladen.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Jan 29, 2015 22:55 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
DXT5 ist die standard Antwort, für no fancy Stuff, benutzen wir in einigen Projekten mit Unity.
Wie gesagt sind Advanced formate wesentlich besser geeignet.
Wenn man auf die Performancevorteile von DXT verzichten kann, ist halffloat eher meine Wahl.

Mit OpenGL4 kann man um vieles mehr machen.
Lookuptables über Quadtree(interger/bitset texture target) und einem Texture array.
Tesselation Unit und Quadratische Splines.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 36 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3  Nächste
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 15 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:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 15 Queries | GZIP : On ]