SDL3 (Simple DirectMedia Layer) Packages

Zur Vorstellung von Komponenten und Units für Lazarus
Mathias
Beiträge: 6709
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: SDL3 (Simple DirectMedia Layer) Packages

Beitrag von Mathias »

Sodale, habe mir nen Transpiler gebastelt und nu die SDL2 mal auf dynamisch angefangen zu Portieren
Und was ist der Unterschied ?
Lädst du jetzt alles mit "LoadLibrary()" und "GetProcAddress()" ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

jammernich
Beiträge: 3
Registriert: Di 5. Nov 2024, 22:36

Re: SDL3 (Simple DirectMedia Layer) Packages

Beitrag von jammernich »

Ich freue mich sehr über beide Projekte! :)

SDL3 bietet einen noch größeren Funktionsumfang (das finde ich teilweise überfordernd). Ich bin im Moment noch dran, SDL2 auszuprobieren und arbeite viel mit den PGD sdl2 Units.

@Mathias: zlib klingt gut.

@corpsman: Das klingt sehr interessant. Kannst du vielleicht später ein Beispielprogramm veröffentlichen, wie man SDL2 dynamisch einbindet, vielleicht einfach ein program das die Initializierung von SDL durchläuf und die Möglichkeit einer verbesserten Fehlerbehandlung demonstriert. Ein "hello world" quasi.. :mrgreen:

Viel Erfolg weiterhin!

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

Re: SDL3 (Simple DirectMedia Layer) Packages

Beitrag von Mathias »

Kannst du vielleicht später ein Beispielprogramm veröffentlichen, wie man SDL2 dynamisch einbindet,
Eines vor weg, arbeitet man mit "LoadLibrary()" und "GetProcAddress()" dann wird die EXE unnötig aufgebläht, weil jede Funktion geladen wird. Ausser man macht sich die Mühe und lädt nur das was man braucht, was aber sehr aufwändig ist.
Das sieht man sehr gut bei OpenGL 4.6, das wird die EXE sehr gross, auch wen es nur ein einfachen Dreieck rendert.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1578
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: SDL3 (Simple DirectMedia Layer) Packages

Beitrag von corpsman »

jammernich hat geschrieben: Mi 20. Nov 2024, 19:35 @corpsman: Das klingt sehr interessant. Kannst du vielleicht später ein Beispielprogramm veröffentlichen, wie man SDL2 dynamisch einbindet, vielleicht einfach ein program das die Initializierung von SDL durchläuf und die Möglichkeit einer verbesserten Fehlerbehandlung demonstriert. Ein "hello world" quasi.. :mrgreen:
*g*
ich hab schon eins, mit dem ich das getestet habe. Ich schau mal dass ich es morgen in mein Examples Repo reinbastle, dann könnt ihr es selbst testen wenn ihr nen Joystick oder ein Gamepad habt ;).
--
Just try it

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1578
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: SDL3 (Simple DirectMedia Layer) Packages

Beitrag von corpsman »

So ich denke ich hab nu alles hochgeladen was ihr braucht um es zu testen ;)

1. Die Demo hier: https://github.com/PascalCorpsman/Examp ... stick_Demo
2. die https://github.com/PascalCorpsman/Examp ... ystick.pas
3. Natürlich die SDL2 Headerfiles https://github.com/PascalCorpsman/SDL2-for-Pascal

Dann könnt ihr über die sdl2_cfg.inc Datei zwischen statisch und dynamisch umschalten:

Code: Alles auswählen

 {*
  * set this define if you want to use runtime loading instead of static linking
  * ! Attention !
  * Not all functions are "ported" yet, so use is on own risk
  * port missing functions.
  *}
{$DEFINE SDL_RUNTIME_LOADING} // <-- Dynamisch gelinkt
{.$DEFINE SDL_RUNTIME_LOADING} // <-- Statisch gelinkt
--
Just try it

PascalDragon
Beiträge: 904
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: SDL3 (Simple DirectMedia Layer) Packages

Beitrag von PascalDragon »

Mathias hat geschrieben: Mi 20. Nov 2024, 19:57
Kannst du vielleicht später ein Beispielprogramm veröffentlichen, wie man SDL2 dynamisch einbindet,
Eines vor weg, arbeitet man mit "LoadLibrary()" und "GetProcAddress()" dann wird die EXE unnötig aufgebläht, weil jede Funktion geladen wird. Ausser man macht sich die Mühe und lädt nur das was man braucht, was aber sehr aufwändig ist.
Das sieht man sehr gut bei OpenGL 4.6, das wird die EXE sehr gross, auch wen es nur ein einfachen Dreieck rendert.
Das amortisiert sich aber sehr schnell, wenn man eben mehr macht, als nur ein Dreieck zu rendern. Und an sich sind die Kosten pro Funktion ein Zeiger, der auch beim statischen importieren vorhanden ist (nur nicht auf dem Heap, sondern im Datenbereich) sowie die Ladefunktionalität.
FPC Compiler Entwickler

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

Re: SDL3 (Simple DirectMedia Layer) Packages

Beitrag von Mathias »

corpsman hat geschrieben: Do 21. Nov 2024, 07:10 So ich denke ich hab nu alles hochgeladen was ihr braucht um es zu testen ;)

1. Die Demo hier: https://github.com/PascalCorpsman/Examp ... stick_Demo
2. die https://github.com/PascalCorpsman/Examp ... ystick.pas
3. Natürlich die SDL2 Headerfiles https://github.com/PascalCorpsman/SDL2-for-Pascal

Dann könnt ihr über die sdl2_cfg.inc Datei zwischen statisch und dynamisch umschalten:

Code: Alles auswählen

 {*
  * set this define if you want to use runtime loading instead of static linking
  * ! Attention !
  * Not all functions are "ported" yet, so use is on own risk
  * port missing functions.
  *}
{$DEFINE SDL_RUNTIME_LOADING} // <-- Dynamisch gelinkt
{.$DEFINE SDL_RUNTIME_LOADING} // <-- Statisch gelinkt
Ich sehe da nirgends was dynamisches. Müsste da nicht ein GetProcAdress sein ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1578
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: SDL3 (Simple DirectMedia Layer) Packages

Beitrag von corpsman »

Mathias hat geschrieben: Do 21. Nov 2024, 23:10
corpsman hat geschrieben: Do 21. Nov 2024, 07:10 So ich denke ich hab nu alles hochgeladen was ihr braucht um es zu testen ;)

1. Die Demo hier: https://github.com/PascalCorpsman/Examp ... stick_Demo
2. die https://github.com/PascalCorpsman/Examp ... ystick.pas
3. Natürlich die SDL2 Headerfiles https://github.com/PascalCorpsman/SDL2-for-Pascal

Dann könnt ihr über die sdl2_cfg.inc Datei zwischen statisch und dynamisch umschalten:

Code: Alles auswählen

 {*
  * set this define if you want to use runtime loading instead of static linking
  * ! Attention !
  * Not all functions are "ported" yet, so use is on own risk
  * port missing functions.
  *}
{$DEFINE SDL_RUNTIME_LOADING} // <-- Dynamisch gelinkt
{.$DEFINE SDL_RUNTIME_LOADING} // <-- Statisch gelinkt
Ich sehe da nirgends was dynamisches. Müsste da nicht ein GetProcAdress sein ?
Da ist es doch: https://github.com/PascalCorpsman/SDL2- ... inking.inc

Zumindest unter Windows kannst du es auch einfach sehen, wenn du die SDL2.dll vor dem Start Umbenennst, da bei der Runtime Loading variante dann eine andere Fehlermeldung kommt als bei der statischen Variante:

Code: Alles auswählen

Procedure TForm1.FormCreate(Sender: TObject);
Var
  ver: TSDL_Version;
  i: Integer;
Begin
{$IFDEF SDL_RUNTIME_LOADING}
  If Not SDL_LoadLib('') Then Begin
    ShowMessage('Error, unable to load sdl lib'); // Via Runtime Fehler wenn DLL nicht geladen werden kann.
    halt;
  End;
{$ENDIF}
--
Just try it

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

Re: SDL3 (Simple DirectMedia Layer) Packages

Beitrag von Mathias »

Das amortisiert sich aber sehr schnell, wenn man eben mehr macht, als nur ein Dreieck zu rendern. Und an sich sind die Kosten pro Funktion ein Zeiger, der auch beim statischen importieren vorhanden ist (nur nicht auf dem Heap, sondern im Datenbereich) sowie die Ladefunktionalität.
Wieso findet man dann die dynamische Bindung fast nirgends ?
Ausser bei modern OpenGL, da geht es kaum anders, vor allem bei Windows.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

PascalDragon
Beiträge: 904
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: SDL3 (Simple DirectMedia Layer) Packages

Beitrag von PascalDragon »

Mathias hat geschrieben: Fr 22. Nov 2024, 17:56
Das amortisiert sich aber sehr schnell, wenn man eben mehr macht, als nur ein Dreieck zu rendern. Und an sich sind die Kosten pro Funktion ein Zeiger, der auch beim statischen importieren vorhanden ist (nur nicht auf dem Heap, sondern im Datenbereich) sowie die Ladefunktionalität.
Wieso findet man dann die dynamische Bindung fast nirgends ?
Ausser bei modern OpenGL, da geht es kaum anders, vor allem bei Windows.
Die ganzen Units für die verschiedenen SQL Bibliotheken nutzen dynamisches Laden, da sie mit verschiedenen Versionen klarkommen müssen. Ansonsten hast du eben noch den Runtime Overhead: beim Laden der Anwendung ist das Betriebssystem eh damit beschäftigt Bibliotheken dynamisch zusammen zu linken. Da kommt es auf ein paar mehr oder weniger nicht an. Durch dynamisches Laden zur Laufzeit muss dann die geladenene Bibliothek auch erstmal dynamisch gelinkt werden und dann jede Funktion gefunden werden. Es ist also letztilch ein Austausch zwischen Lade- und Laufzeit.
FPC Compiler Entwickler

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

Re: SDL3 (Simple DirectMedia Layer) Packages

Beitrag von Mathias »

Ich würde sagen, dynamischen Linken mach Sinn, wen nicht immer das Gleiche geladen wird. ZB. ein Hardware Spezifische lib, welche eine Messkarte anspricht. Es gibt Messprogramme, die verschiedene Messkarten unterstützen.

Bei SDLx, GTKx und co. macht es wenig Sinn, entweder ist die Bibliothek da, oder das Programm läuft gar nicht.
Es würde auch kein Sinn machen,, wen man zB. printf zur Laufzeit reinlinkt.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1578
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: SDL3 (Simple DirectMedia Layer) Packages

Beitrag von corpsman »

Naja in der Windows Welt, wo ich die SDL.dll mit liefere macht das ggf. Sinn.
Aber unter Linux wo der User eben irgend eine SDL Lib version installiert hat, kann ich mittels laden zur Laufzeit nur den Funktionsumfang laden den ich brauche, und bin dadurch flexibler. Ist halt geschmackssache.

Bei meinem FPC_Atomic wollte ich das zur Laufzeit laden drin haben, weil ich SDL da ja nur für den Joystick nehme, und ich den Linux user nicht dazu nötigen wollte immer SDL zu installeren, wenn er ggf. gar keinen Joystick nutzen will.
--
Just try it

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

Re: SDL3 (Simple DirectMedia Layer) Packages

Beitrag von Mathias »

Naja in der Windows Welt, wo ich die SDL.dll mit liefere macht das ggf. Sinn.
Aber unter Linux wo der User eben irgend eine SDL Lib version installiert hat, kann ich mittels laden zur Laufzeit nur den Funktionsumfang laden den ich brauche, und bin dadurch flexibler. Ist halt geschmackssache.
Die könnte für dich auch eine Lösung sein, das ganze SDL-Zeugs statisch rein zu linken.
Dann spielt es keine Rolle, was der User installiert hat.

Code: Alles auswählen

{$linklib SDL2}
weil ich SDL da ja nur für den Joystick nehme,
Wen du die DLL selbst baust, kannst du eine angepasste abgespeckte *.a bauen, welche nur den Joystick unterstützt.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

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

Re: SDL3 (Simple DirectMedia Layer) Packages

Beitrag von Mathias »

Hat zufällig einer die Möglichkeit meine Package auf einem Mac zu testen ?
Die dazu nötigen Libs sollte man alle hier finden: https://github.com/libsdl-org/SDL/relea ... view-3.1.6

Ich habe mal folgendes rein geschrieben, aber ob dies reicht weis ich nicht.

Code: Alles auswählen

const
  {$IFDEF Linux}
  libSDL3 = 'SDL3';
  {$ENDIF}

  {$IFDEF Windows}
  libSDL3 = 'SDL3';
  {$ENDIF}

  {$IFDEF Darwin}
  libSDL3 = 'libSDL3.dylib';
  {$ENDIF}
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

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

Re: SDL3 (Simple DirectMedia Layer) Packages

Beitrag von Mathias »

Ich habe gerade die Bindung an das neue Release 3.1.8 angepasst.

https://github.com/sechshelme/Lazarus-S ... ease-3.1.8
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten