SDL3 (Simple DirectMedia Layer) Packages

Zur Vorstellung von Komponenten und Units für Lazarus
Mathias
Beiträge: 6849
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 »

Finde keine DLL-Datei, die nicht die Meldung "Unable to render text surface! SDL_ttf Error: That operation is not supported" ausgibt..
Hast du vielleicht eine funktionierende Win32-x64 DLL version parat oder könntest du eine bauen?
Ich habe ein wenig in die git von SDL_ttf geguckt, da wurde sehr vieles geändert. So wird kaum mehr eine bestehende DLL funktionieren.
Somit am besten Geduld habe, bis die stable veröffentlicht wird.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Neo1171
Beiträge: 12
Registriert: Do 7. Nov 2024, 17:56

Re: SDL3 (Simple DirectMedia Layer) Packages

Beitrag von Neo1171 »

Mathias hat geschrieben: Sa 1. Feb 2025, 08:42 Ich habe ein wenig in die git von SDL_ttf geguckt, da wurde sehr vieles geändert. So wird kaum mehr eine bestehende DLL funktionieren.
Somit am besten Geduld habe, bis die stable veröffentlicht wird.
Alles klar. Danke dir

Mathias
Beiträge: 6849
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 habs ja gesagt, es geht nicht mehr lange: :wink:

https://discourse.libsdl.org/t/announci ... view/57493

Die DLLs:
https://github.com/libsdl-org/SDL_ttf/r ... view-3.1.0

Bei Gelegenheit werde ich die Bindung noch anpassen.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Mathias
Beiträge: 6849
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 »

Bei Gelegenheit werde ich die Bindung noch anpassen.
SDL3_ttf sollte nun laufen. Man brächte nur noch ein schlaues HelloWorld.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Neo1171
Beiträge: 12
Registriert: Do 7. Nov 2024, 17:56

Re: SDL3 (Simple DirectMedia Layer) Packages

Beitrag von Neo1171 »

So, habs grade ausprobiert.. und.. es funktioniert :D Habe nen schönes orangenes unterstrichenes und durchsichtiges "Hello World!" in eine PNG-Datei gespeichert bekommen. Besten Dank!

Mathias
Beiträge: 6849
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 »

Noch ein Beispiel mit TFF-Font.
Der Text wird in eine Textur gespeichert und anschliessend auf den Bildschirm gerendert.

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

Mathias
Beiträge: 6849
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 »

Ee ist gerade SDL 3.2.4 erschienen, bei der Bindung hat es nur eine kleine Änderung in Surface gegeben.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

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

Re: SDL3 (Simple DirectMedia Layer) Packages

Beitrag von TSchnuckenbock »

Ich hatte mit meinem Lazarus 3.2 einige der Beispiele (Examples) durchprobiert.
Bei einigen Beispielen klappte das Kompilieren nicht wegen

Code: Alles auswählen

...
rDest.items := [150, 150, 256, 256]; 
...
Dann probierte ich es mit einem Lazarus 4.99 (FPCUpDelux und dann trunk) und es kompilierte.

Vielleicht wäre es für andere Leute hilfreich, wenn du auf der GitHub-Projekt-Seite noch die Infos hinzufügst, welche Lazarus/FPC-Version man mindestens benötigt (oder habe ich die Info nicht gefunden?).

Mathias
Beiträge: 6849
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 hatte mit meinem Lazarus 3.2 einige der Beispiele (Examples) durchprobiert.
Bei einigen Beispielen klappte das Kompilieren nicht wegen
Da war ich wohl ein bisschen zu grosszügig mit den Array-Operationen. Da habe ich mir selbst ein Ei gelegt, weil ich dachte es käme bald FPC 3.4 raus, und jetzt ist es schon ein paar Jahre her. Das letzte Update von FPC war am 20. Mai 2021 !

Meine Idee mit den Items war, das man möglichst C-Code als Vorlage verwenden kann.
Dann probierte ich es mit einem Lazarus 4.99 (FPCUpDelux und dann trunk) und es kompilierte.
Wen ich das so lese, die Package selbst wird mit FPC 3.2 anstandslos kompiliert ?
Vielleicht wäre es für andere Leute hilfreich, wenn du auf der GitHub-Projekt-Seite noch die Infos hinzufügst, welche Lazarus/FPC-Version man mindestens benötigt (oder habe ich die Info nicht gefunden?).
Ich werde da bei Gelegenheit nach holen.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

jammernich
Beiträge: 20
Registriert: Di 5. Nov 2024, 22:36
OS, Lazarus, FPC: Win11, Lazarus 3.8
CPU-Target: x86_64bit

Re: SDL3 (Simple DirectMedia Layer) Packages

Beitrag von jammernich »

hallo,

Wichtige Einstellungen für die SDL3 Initializierung trifft man mit SDL_CreateWindow(), SDL_CreateRenderer() über Flags. Von beiden Funktionen gibt es jetzt auch Versionen mit "Properties". Funktioniert das ähnlich wie ein Diktionary (Pair:Value) ? Und gibt es ein vielleicht ein Beispiel wie das zu handhaben ist für SDL_CreateWindowWithProperties() oder auch allgemein?

aus dem SDL3 Cheatsheet, C++

Code: Alles auswählen

SDL_Window * SDL_CreateWindowWithProperties(SDL_PropertiesID props);  // Create a window with the specified properties.
SDL_PropertiesID SDL_GetWindowProperties(SDL_Window *window); 
---
SDL_PropertiesID SDL_GetGlobalProperties(void);                                                                                                      // Get the global SDL properties.
SDL_PropertiesID SDL_CreateProperties(void);                                                                                                         // Create a group of properties.
bool SDL_CopyProperties(SDL_PropertiesID src, SDL_PropertiesID dst);                                                                                 // Copy a group of properties.
bool SDL_LockProperties(SDL_PropertiesID props);                                                                                                     // Lock a group of properties.
void SDL_UnlockProperties(SDL_PropertiesID props);                                                                                                   // Unlock a group of properties.
bool SDL_SetPointerPropertyWithCleanup(SDL_PropertiesID props, const char *name, void *value, SDL_CleanupPropertyCallback cleanup, void *userdata);  // Set a pointer property in a group of properties with a cleanup function that is called when the property is deleted.
bool SDL_SetPointerProperty(SDL_PropertiesID props, const char *name, void *value);                                                                  // Set a pointer property in a group of properties.
bool SDL_SetStringProperty(SDL_PropertiesID props, const char *name, const char *value);                                                             // Set a string property in a group of properties.
bool SDL_SetNumberProperty(SDL_PropertiesID props, const char *name, Sint64 value);                                                                  // Set an integer property in a group of properties.
bool SDL_SetFloatProperty(SDL_PropertiesID props, const char *name, float value);                                                                    // Set a floating point property in a group of properties.
bool SDL_SetBooleanProperty(SDL_PropertiesID props, const char *name, bool value);                                                                   // Set a boolean property in a group of properties.
bool SDL_HasProperty(SDL_PropertiesID props, const char *name);                                                                                      // Return whether a property exists in a group of properties.
SDL_PropertyType SDL_GetPropertyType(SDL_PropertiesID props, const char *name);                                                                      // Get the type of a property in a group of properties.
void * SDL_GetPointerProperty(SDL_PropertiesID props, const char *name, void *default_value);                                                        // Get a pointer property from a group of properties.
const char * SDL_GetStringProperty(SDL_PropertiesID props, const char *name, const char *default_value);                                             // Get a string property from a group of properties.
Sint64 SDL_GetNumberProperty(SDL_PropertiesID props, const char *name, Sint64 default_value);                                                        // Get a number property from a group of properties.
float SDL_GetFloatProperty(SDL_PropertiesID props, const char *name, float default_value);                                                           // Get a floating point property from a group of properties.
bool SDL_GetBooleanProperty(SDL_PropertiesID props, const char *name, bool default_value);                                                           // Get a boolean property from a group of properties.
bool SDL_ClearProperty(SDL_PropertiesID props, const char *name);                                                                                    // Clear a property from a group of properties.
bool SDL_EnumerateProperties(SDL_PropertiesID props, SDL_EnumeratePropertiesCallback callback, void *userdata);                                      // Enumerate the properties contained in a group of properties.
void SDL_DestroyProperties(SDL_PropertiesID props); 

Mathias
Beiträge: 6849
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 »

Hier die Verwendung von Benutzerdefinierten Properties.

Code: Alles auswählen

program Project1;

uses
  SDL3;

var
  props: TSDL_PropertiesID;
  number: TSint64;
  hello: PAnsiChar;
begin
  SDL_Init(SDL_INIT_VIDEO or SDL_INIT_AUDIO);

  props := SDL_CreateProperties;

  SDL_SetNumberProperty(props, 'number', 1234);
  SDL_SetStringProperty(props, 'hello', 'Hello World!');

  number := SDL_GetNumberProperty(props, 'number', 0);
  hello := SDL_GetStringProperty(props, 'hello', 'hallo');
  SDL_Log('Number: %d', number);  // -> 1234
  SDL_Log('String:: %s', hello);  // -> HelloWorld!

  hello := SDL_GetStringProperty(props, 'xxx', 'hello');
  SDL_Log('String:: %s', hello);  // -> hello
end.  
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

jammernich
Beiträge: 20
Registriert: Di 5. Nov 2024, 22:36
OS, Lazarus, FPC: Win11, Lazarus 3.8
CPU-Target: x86_64bit

Re: SDL3 (Simple DirectMedia Layer) Packages

Beitrag von jammernich »

Anmerkung: es soll Key-Value Pair heißen.

Vielen Dank Mathias!

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

Re: SDL3 (Simple DirectMedia Layer) Packages

Beitrag von TSchnuckenbock »

Mathias hat geschrieben: So 23. Feb 2025, 08:31
Dann probierte ich es mit einem Lazarus 4.99 (FPCUpDelux und dann trunk) und es kompilierte.
Wen ich das so lese, die Package selbst wird mit FPC 3.2 anstandslos kompiliert ?
Das Package kompilieren geht mit Lazarus 3.2+FPC 3.2.2 auf Win64 bei mir problemlos.
Aber obige Array-Zuweisung in den Examples geht nicht.

Dann noch ein Problem: "SDL_GetKeyboardState" wird nicht gefunden in z.B. dem Example "10_-_Shapes_Windows_from_PNG"

Ach ja, und dann war mir bei meinen Stichproben der Examples aufgefallen, daß in einem Beispiel-Projekt das Target-OS auf "Linux" stand. Ändert man es auf "Default", was bei vielen anderen deiner Beispiel-Projekte bereits der Fall ist, dann klappt's auch unter Windows.
Also bei allen Beispielen mal die Projekt-Optionen checken.;-)

Mathias
Beiträge: 6849
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 Package kompilieren geht mit Lazarus 3.2+FPC 3.2.2 auf Win64 bei mir problemlos.
Aber obige Array-Zuweisung in den Examples geht nicht.
Wie schon gesagt, liegt das daran, das die stable von FPC schon fast ein Oldie ist.
Ich hoffe, das bald mal FPC 3.4 kommt. In Sache Vektoren gibt es recht tollte Sachen in FPC 3.3.
Dann noch ein Problem: "SDL_GetKeyboardState" wird nicht gefunden in z.B. dem Example "10_-_Shapes_Windows_from_PNG"
Das sollte jetzt behoben sein. Das kommt man davon, wen man Examples schreibt, obwohl SDL3 noch beta war. Der KeyState wurde von PByte auf PBoolean geändert.
Ach ja, und dann war mir bei meinen Stichproben der Examples aufgefallen, daß in einem Beispiel-Projekt das Target-OS auf "Linux" stand. Ändert man es auf "Default", was bei vielen anderen deiner Beispiel-Projekte bereits der Fall ist, dann klappt's auch unter Windows.
Also bei allen Beispielen mal die Projekt-Optionen checken.;-)
Habe es gerade gemacht, jetzt sollte überall default sein.
Nur ob es auf einem Mac läuft, da habe ich keine Ahnung, da ich es nicht testen kann.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Mathias
Beiträge: 6849
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 eine Stolper falle entdeckt. Wen man SDL_mutex und SDL_thread verwendet, muss man sämtliches Debugging ausschalten, ansonsten löst es zumindest und Linux einen "Runtimer error 202" ( Stack Überlauf ) aus.
Dateianhänge
Bildschirmfoto vom 2025-02-24 19-28-12.png
Bildschirmfoto vom 2025-02-24 19-28-12.png (149.84 KiB) 1374 mal betrachtet
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten