Einstieg OpenGL => Textausgabe

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
Mathias
Beiträge: 6918
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Einstieg OpenGL => Textausgabe

Beitrag von Mathias »

Zum Thema Umlaute und OpenGL. Wen man nur die Standardzeichen #32-#127 verwendet, kann man die in eine Bitmap ablegen und hat dann später sehr schnellen Zugriff, wen die Bitmap im VRAM ist. Auch das Rendering in einem Satz ist sehr einfach, eine forto Schleife auf jedes Zeichen, fertig. Will man UTF8 verwenden ist dies fast unmöglich.
Ein Kompromiss gibt es, man wandelt den UTF8-Text in ein Standard-ASCII Code um, dann hat man Zugriff von #32-#255. Dann ist es etwas so wie dazumal zu TP Zeiten. Die gängigen Sonderzeichen und Umlaute hat man dann zu Verfügung.

Was auch geht, wen das Text statisch ist, kann man den ganz am Anfang in verschieden Bitmaps rendern.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

PeterS
Beiträge: 161
Registriert: So 22. Feb 2015, 11:36
OS, Lazarus, FPC: L 3.8
CPU-Target: win32

Re: Einstieg OpenGL => Textausgabe

Beitrag von PeterS »

Mathias hat geschrieben: Sa 1. Mär 2025, 08:38 Zum Thema Umlaute und OpenGL. Wen man nur die Standardzeichen #32-#127 verwendet, kann man die in eine Bitmap ablegen und hat dann später sehr schnellen Zugriff, wen die Bitmap im VRAM ist. Auch das Rendering in einem Satz ist sehr einfach, eine forto Schleife auf jedes Zeichen, fertig.
Darf ich annehmen, Du meinst in etwa das, was ich hier zusammengebaut hatte ?
=>
viewtopic.php?p=141897#p141897
.
Example.png
Example.png (149.8 KiB) 18124 mal betrachtet

PeterS
Beiträge: 161
Registriert: So 22. Feb 2015, 11:36
OS, Lazarus, FPC: L 3.8
CPU-Target: win32

Re: Einstieg OpenGL => Textausgabe

Beitrag von PeterS »

af0815 hat geschrieben: Sa 1. Mär 2025, 07:46 Du wirst halt irgendwo einen Kompromiss eingehen müssen.
Klar, ich kämpfe mich durch.

Irgendeine Lösung muss am Ende das Bitmap ersetzen,
in das ich im Moment meine Daten und Texte reinschreibe.

Aktuell mappe ich dieses Bitmap ganz klassisch auf einen Canvas.
Angesichts HiDPI und der Skalierungs-Optionen (%) von Windows
ist sowas aber echt lästig zu programmieren.
Und je nach Windows-Einstellungen auf dem jeweiligen Rechner
sieht es auch immer anders aus.

PeterS
Beiträge: 161
Registriert: So 22. Feb 2015, 11:36
OS, Lazarus, FPC: L 3.8
CPU-Target: win32

Re: Einstieg OpenGL => Textausgabe

Beitrag von PeterS »

So richtig scharf sind die Schriften nicht, aber schon nicht schlecht, diese Lösung.
.
Screenshot (327).png
Screenshot (327).png (98.92 KiB) 18090 mal betrachtet
Dateianhänge
opengltest6.zip
(32.82 KiB) 96-mal heruntergeladen

Mathias
Beiträge: 6918
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Einstieg OpenGL => Textausgabe

Beitrag von Mathias »

Aktuell mappe ich dieses Bitmap ganz klassisch auf einen Canvas.
Angesichts HiDPI und der Skalierungs-Optionen (%) von Windows
ist sowas aber echt lästig zu programmieren.
Und je nach Windows-Einstellungen auf dem jeweiligen Rechner
sieht es auch immer anders aus.
Ich kenne die TBitmap, an dieser beisst man sich die Zähne aus, Bei Linux und Windows ist sie ganz anders aufgebaut, Und ein Format erzwingen habe ich bis jetzt nicht hingekriegt. Das haben SDL und co,. viel besser gelöst.

Jetzt kommt mir grade eine Idee, du könnten SDL_ttf verwenden und eine surface Font zu erzeugen, welcher du dann für OpenGL verwenden kannst.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

PeterS
Beiträge: 161
Registriert: So 22. Feb 2015, 11:36
OS, Lazarus, FPC: L 3.8
CPU-Target: win32

Re: Einstieg OpenGL => Textausgabe

Beitrag von PeterS »

Nochmal zurück zu den multichannel signed distance fields,
da habe ich das hier als aktuellstes Projekt gefunden.

Als reiner Pascal-User verstehe ich allerdings absolut kein Wort.
Ich habe keinerlei Idee, wie man damit ein Font-Pärchen .png + .json baut.

https://github.com/soimy/msdf-bmfont-xml

Mathias
Beiträge: 6918
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Einstieg OpenGL => Textausgabe

Beitrag von Mathias »

Was auch noch eine Alternative ist, cairo graphics. Damit kannst du auch in eine Art Bitmap rendern, und dies Bitmap dann mit.
Und diese Bitmap ladest du mit glTexImage2D hoch.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

PeterS
Beiträge: 161
Registriert: So 22. Feb 2015, 11:36
OS, Lazarus, FPC: L 3.8
CPU-Target: win32

Re: Einstieg OpenGL => Textausgabe

Beitrag von PeterS »

Mathias hat geschrieben: So 2. Mär 2025, 08:49 Was auch noch eine Alternative ist, cairo graphics. Damit kannst du auch in eine Art Bitmap rendern.
Und diese Bitmap ladest du mit glTexImage2D hoch.
Ich sehe, Du hast schon mit Cairo gekämpft ..
.
viewtopic.php?p=133473#p133473

Dort wird auch Google's Skia-Graphics erwähnt.
Hast Du damit auch mal experimentiert ?
.
Soner hat geschrieben: So 29. Jan 2023, 20:09 Ich würde in deiner Stellle, meine Zeit nicht mit Cairo-Graphics verschwenden, die größten Cairo-Benutzer haben zu Google's Skia-Graphics gewechselt, z.B, Firefox.
Wenn schon dann Skia oder lazarus/components/aggpas.
Haiku-OS verwendet AGG-Graphics für alle Graphicausgaben.
Jemand hat hier Skia für Delphi convertiert.
Zuletzt geändert von PeterS am So 2. Mär 2025, 12:05, insgesamt 1-mal geändert.

PeterS
Beiträge: 161
Registriert: So 22. Feb 2015, 11:36
OS, Lazarus, FPC: L 3.8
CPU-Target: win32

Re: Einstieg OpenGL => Textausgabe

Beitrag von PeterS »

Habe gerade gesehen / gefunden daß BGRABitmap auch irgendwas mit oder wie AggPas kann ?
.
https://wiki.freepascal.org/BGRABitmap_AggPas
.
Und BGRABitmap habe ich ja jetzt auf der Platte .. :)
.
Screenshot (329).png
Screenshot (329).png (6.34 KiB) 17811 mal betrachtet

PeterS
Beiträge: 161
Registriert: So 22. Feb 2015, 11:36
OS, Lazarus, FPC: L 3.8
CPU-Target: win32

Re: Einstieg OpenGL => Textausgabe

Beitrag von PeterS »

Ich habe jetzt mal das BLUR Beispiel von BGRABitmap modifiziert.
In riesigen Buchstaben sieht das schon eindrucksvoll aus,
aber es muss ja in "normal großer Schrift" ordentlich aussehen.
.
Screenshot (334).png
Screenshot (334).png (156.84 KiB) 17798 mal betrachtet
Dateianhänge
blur.zip
(5.66 KiB) 75-mal heruntergeladen

Mathias
Beiträge: 6918
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Einstieg OpenGL => Textausgabe

Beitrag von Mathias »

Dies habe ich gerade getestet und es funktioniert. Einziges Manko, die Schrift ist ganz normal, von links nach rechts, wie bei einem Canvas mit TextOut. Es sind somit keine Drehungen und Skalierungen möglich,

Hier der wichtige Ausschnitt aus einem C-Programm.

Bei FPC muss man einfach die Unit GL und GLUT einbinden, dann sollte es kein Problem sein,

Code: Alles auswählen

void renderBitmapString(float x, float y, void *font, const char *string) {
    const char *c;

    glRasterPos2f(x, y);
    for (c = string; *c != '\0'; c++) {
        glutBitmapCharacter(font, *c);
    }
}

....
    glColor3f(1.0f, 1.0f, 1.0f);  // Weiße Textfarbe
    renderBitmapString(-0.9f, 0.4f, GLUT_BITMAP_HELVETICA_18, "Hallo OpenGL!");
    renderBitmapString(-0.9f, 0.2f, GLUT_BITMAP_HELVETICA_12, "Ein Dreieck dreht sich im Hintergrund.");
....
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

PeterS
Beiträge: 161
Registriert: So 22. Feb 2015, 11:36
OS, Lazarus, FPC: L 3.8
CPU-Target: win32

Re: Einstieg OpenGL => Textausgabe

Beitrag von PeterS »

Mathias hat geschrieben: So 2. Mär 2025, 16:29 Dies habe ich gerade getestet und es funktioniert. Einziges Manko, die Schrift ist ganz normal, von links nach rechts, wie bei einem Canvas mit TextOut. Es sind somit keine Drehungen und Skalierungen möglich
Wäre mir egal, das muss ich mal ausprobieren.
Hast Du ein Mini-Demo-Programm davon ?

PeterS
Beiträge: 161
Registriert: So 22. Feb 2015, 11:36
OS, Lazarus, FPC: L 3.8
CPU-Target: win32

Re: Einstieg OpenGL => Textausgabe

Beitrag von PeterS »

Ich bin nochmal die BGRABitmap Test-Projekte durchgegangen,
und habe das folgende Projekt modifiziert.

Wenn man das Fenster mit der Maus in der Größe verändert, skalieren und "wandern" die Schriften mit.
Auch nicht schlecht, aber halt kein OpenGL mit Programmierer-"Spielplatz".
.
Screenshot (336).png
Screenshot (336).png (45.25 KiB) 17769 mal betrachtet
Dateianhänge
test4lcl.zip
(8.1 KiB) 97-mal heruntergeladen

TSchnuckenbock
Beiträge: 118
Registriert: Do 20. Jul 2017, 23:47
OS, Lazarus, FPC: Win7 und Win10
CPU-Target: xxBit
Wohnort: Südheide (Schnuckenland)

Re: Einstieg OpenGL => Textausgabe

Beitrag von TSchnuckenbock »

Ich hab' mir mal das Skia4Delphi für mein Delphi runtergeladen und probiere das gerade mal aus.
Wie es aussieht, ist mindestens FPC-Support angedacht, allerdings vermute ich, in einer recht aktuellen FPC-Version.
Man schaue in die System.Skia.pas:

Code: Alles auswählen

{$IFDEF FPC}
  {$IF DEFINED(FPC_FULLVERSION) and (FPC_FULLVERSION < 30301)}
    {$ERROR Requires at least FPC 3.3.1}
  {$ENDIF}
...

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6780
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Einstieg OpenGL => Textausgabe

Beitrag von af0815 »

Es gibt eine Version von Skia die mit dem FPC laufen muss. Die ist explizit im Fresnel Projekt erwähnt, da dieses darauf aufsetzt. https://gitlab.com/freepascal.org/lazarus/fresnel
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Antworten