freepascal und SDL3 (fpc Streaming und SDL_IOStreams)

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
jammernich
Beiträge: 42
Registriert: Di 5. Nov 2024, 22:36
OS, Lazarus, FPC: Win11, Lazarus 4.5, fpc 3.2.3

freepascal und SDL3 (fpc Streaming und SDL_IOStreams)

Beitrag von jammernich »

Hallo,

ich brauche mal Eure Hilfe.

Free Pascal setzt ja weitestgehend auf TStream varianten wenn es um Lesen und Schreiben von Dateien / Daten im RAM geht. Ich möchte zum Beispiel eine Sequenz packen / Entpacken mit paszlib.
Nun hat aber SDL3 mit den pSDL_IOStream einen ähnlichen Ansatz. Ich kann damit auch Lesen, Schreiben auf verschiedene Ziele. Aber wie kann ich beide Welten vereinen. Z.b. Daten von der Festplatte mit freepascal einlesen, entpacken mit paszlib, dann in SDL3 z.B. daraus (aus dem RAM) eine PNG laden.

Anmerkung: Eine PNG erst zu entpacken mit paszlib und dann mit SDL3_Image über IOStreams zu laden macht nicht richtig Sinn und ist eher beispielhaft für das was ich vorhabe (Entpacken via fpc, Laden via SDL3).

Code: Alles auswählen

SDL_Surface * IMG_LoadPNG_IO(SDL_IOStream *src);
 //aus dem SDLWiki
Also das Problem woran ich scheitere ist: SDL3 möchte pointer und hat seine Befehle für Streaming . Freepascal hat sein eigenes Streaming via Klassen. Wie soll ich damit am besten umgehen?

dann habe ich noch gelesen:
https://wiki.libsdl.org/SDL3/SDL_IOStreamInterface
Remarks
Applications can provide this struct to SDL_OpenIO() to create their own implementation of SDL_IOStream. This is not necessarily required, as SDL already offers several common types of I/O streams, via functions like SDL_IOFromFile() and SDL_IOFromMem().

This structure should be initialized using SDL_INIT_INTERFACE()
Heißt das, dass ich mit pascal eine eigene Variante von Streaming für SDL3 bereitstellen kann?

Viele Grüße

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

Re: freepascal und SDL3 (fpc Streaming und SDL_IOStreams)

Beitrag von Mathias »

Hier ein kleines Beispiel, wie das mit dem SDL_IOStream funktioniert.
Hier werden 2 Integer gespeichert und dann wieder geladen.

Hilft dir dies weiter.
Oder willst du zwingend den Stream von der RTL verwenden ?

Code: Alles auswählen

program Project1;

uses
  SDL3;

  procedure WriteStream;
  var
    stream: PSDL_IOStream;
  begin
    stream := SDL_IOFromFile('test.bin', 'wb');
    SDL_WriteS32LE(stream, 1234);
    SDL_WriteS32LE(stream, 4321);
    SDL_CloseIO(stream);

    SDL_Log('Daten gespeichert');
  end;

  procedure ReadStream;
  var
    stream: PSDL_IOStream;
    i1, i2: int32;
  begin
    stream := SDL_IOFromFile('test.bin', 'rb');
    SDL_ReadS32LE(stream, @i1);
    SDL_ReadS32LE(stream, @i2);
    SDL_CloseIO(stream);

    SDL_Log('i1: %d    i2: %d', i1, i2);
  end;

  procedure main;
  begin
    WriteStream;
    ReadStream;
  end;

begin
  main;
end.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

jammernich
Beiträge: 42
Registriert: Di 5. Nov 2024, 22:36
OS, Lazarus, FPC: Win11, Lazarus 4.5, fpc 3.2.3

Re: freepascal und SDL3 (fpc Streaming und SDL_IOStreams)

Beitrag von jammernich »

Hallo Mathias,
ja das hilft weiter, ich werde weitgehend SDL3 und andere C Libs nutzen.

Antworten