SDL on Raspberry Pi

Linux specific forum
RSrole
User
User
Posts: 71
Joined: Fri Apr 29, 2022 8:27 pm

SDL on Raspberry Pi

Post by RSrole »

I've been playing with a Raspberry Pi 5 and trying to get SDL working. It's very cool that the purebasic/purelibraries/linux folder has a built in library, but it seems it's missing a bunch of functions. So I can call SDL_Init_(#SDL_INIT_VIDEO) (for instance) and it succeeds, but if I call SDL_CreateWindowFrom_(hwnd), the compiler says that the function doesn't exist. The same with some other functions. Anyone else have this problem? And any solutions?

TIA
Russ
User avatar
mk-soft
Always Here
Always Here
Posts: 6245
Joined: Fri May 12, 2006 6:51 pm
Location: Germany

Re: SDL on Raspberry Pi

Post by mk-soft »

Not all extended libraries are implemented in the PB.
So implement them yourself ...

Update 2 ;)

Code: Select all

;-TOP by mk-soft

; ----

#SDL_WINDOWEVENT = $200;

Enumeration
  #SDL_WINDOWEVENT_NONE
  #SDL_WINDOWEVENT_SHOWN
  #SDL_WINDOWEVENT_HIDDEN
  #SDL_WINDOWEVENT_EXPOSED
  #SDL_WINDOWEVENT_MOVED
  #SDL_WINDOWEVENT_RESIZED
  #SDL_WINDOWEVENT_SIZE_CHANGED
  #SDL_WINDOWEVENT_MINIMIZED
  #SDL_WINDOWEVENT_MAXIMIZED
  #SDL_WINDOWEVENT_RESTORED
  #SDL_WINDOWEVENT_ENTER
  #SDL_WINDOWEVENT_LEAVE
  #SDL_WINDOWEVENT_FOCUS_GAINED
  #SDL_WINDOWEVENT_FOCUS_LOST
  #SDL_WINDOWEVENT_CLOSE
  #SDL_WINDOWEVENT_TAKE_FOCUS
  #SDL_WINDOWEVENT_HIT_TEST
  #SDL_WINDOWEVENT_ICCPROF_CHANGED
  #SDL_WINDOWEVENT_DISPLAY_CHANGED
EndEnumeration  

Structure SDL_WindowEvent
  type.l
  timestamp.l
  windowID.l
  event.b
  data1.l
  data2.l
EndStructure

; ----

Structure SDL_Event2
  StructureUnion
    type.l
    window.SDL_WindowEvent
    dummy.l[40]
  EndStructureUnion
EndStructure

; ----

PrototypeC SDL_CreateWindowFrom(*data)
PrototypeC SDL_Init(flags.l)
PrototypeC SDL_Quit()
PrototypeC SDL_CreateWindow(title.p-utf8, x.i, y.i, w.i, h.i, flags.l)
PrototypeC SDL_DestroyWindow(*window)
PrototypeC SDL_PollEvent(*event)
PrototypeC SDL_WaitEvent(*event)
PrototypeC SDL_Delay(time)
PrototypeC SDL_GetError() ; *char

Procedure InitSDL2()
  Global libSDL2
  
  libSDL2 = OpenLibrary(#PB_Any, "libSDL2.so")
  If libSDL2
    Global SDL_CreateWindowFrom.SDL_CreateWindowFrom = GetFunction(libSDL2, "SDL_CreateWindowFrom")
    Global SDL_CreateWindow.SDL_CreateWindow = GetFunction(libSDL2, "SDL_CreateWindow")
    Global SDL_DestroyWindow.SDL_DestroyWindow = GetFunction(libSDL2, "SDL_DestroyWindow")
    Global SDL_Init.SDL_Init = GetFunction(libSDL2, "SDL_Init")
    Global SDL_Quit.SDL_Quit = GetFunction(libSDL2, "SDL_Quit")
    Global SDL_Quit.SDL_Quit = GetFunction(libSDL2, "SDL_Quit")
    Global SDL_PollEvent.SDL_PollEvent = GetFunction(libSDL2, "SDL_PollEvent")
    Global SDL_WaitEvent.SDL_WaitEvent = GetFunction(libSDL2, "SDL_WaitEvent")
    Global SDL_Delay.SDL_Delay = GetFunction(libSDL2, "SDL_Delay")
    Global SDL_GetError.SDL_GetError = GetFunction(libSDL2, "SDL_GetError")
    
  EndIf
  ProcedureReturn libSDL2
EndProcedure

; ----

If Not InitSDL2()
  End
EndIf

Global event.SDL_Event2

If SDL_Init(#SDL_INIT_VIDEO) = 0
  *win = SDL_CreateWindow("SDL_Window", 100, 100, 640, 480, 0)
  If *win
    Repeat
      While SDL_PollEvent(@event) ; SDL_WaitEvent(@Event)
        Select event\type
          Case #SDL_WINDOWEVENT
            Select event\window\event
              Case #SDL_WINDOWEVENT_CLOSE
                Debug "windowID " + event\window\windowID + " Close"
                Done = #True
              Case #SDL_WINDOWEVENT_MINIMIZED
                Debug "windowID " + event\window\windowID + " Minimize"
              Case #SDL_WINDOWEVENT_RESTORED
                Debug "windowID " + event\window\windowID + " Restore"
            EndSelect
        EndSelect
      Wend
      SDL_Delay(100)
    Until Done
    SDL_DestroyWindow(*win)
  EndIf
  SDL_Quit()
Else
  error = SDL_GetError()
  If error
    Debug "Error Init: " + PeekS(error, -1, #PB_Ascii)
  EndIf
EndIf
My Projects ThreadToGUI / OOP-BaseClass / EventDesigner V3
PB v3.30 / v5.75 - OS Mac Mini OSX 10.xx - VM Window Pro / Linux Ubuntu
Downloads on my Webspace / OneDrive
Post Reply