1. SDL 2 Wrapper using FFI
- Posted by Icy_Viking Oct 20, 2022
- 709 views
Hello,
I have recently re-wrote(well some copy and paste and modifications here and there) to adapt with the new FFI library that was recently made by Greg. Its pretty much done except for the hints functions. I have a couple demo programs. I haven't uploaded the library yet as I'm still working on the finishing touches. Just wondering if you guys are interested or have any feedback?
Oh I have written the library to more closely match SDL in terms of C source. For example SDL.h becmes SDL.e and so forth.
------------------------------------- --EuSDL2 -- --Written by Andy P. (Icy_Viking) -- --SDL Ver: 2.24.1 -- --Euphoria Ver: 4.1.0 Beta 2 -- --Using FFI for Euphoria -- --Icy Viking Games -- ------------------------------------- without warning include std/machine.e include std/ffi.e --replaces std/dll.e include std/os.e include std/math.e --for or_all({}) function public atom sdl = 0 --Load shared library for OS ifdef WINDOWS then sdl = open_dll("SDL2.dll") elsifdef LINUX or FREEBSD then sdl = open_dll("SDL2.so") end ifdef --SDL include files public include SDL_assert.e public include SDL_atomic.e public include SDL_audio.e public include SDL_clipboard.e public include SDL_cpuinfo.e public include SDL_endian.e public include SDL_error.e public include SDL_events.e public include SDL_filesystem.e public include SDL_gamecontroller.e public include SDL_guid.e public include SDL_haptic.e public include SDL_hidapi.e --public include SDL_hints.e public include SDL_joystick.e public include SDL_loadso.e public include SDL_log.e public include SDL_messagebox.e public include SDL_metal.e public include SDL_mutex.e public include SDL_power.e public include SDL_pixels.e public include SDL_surface.e public include SDL_render.e public include SDL_rwops.e public include SDL_shape.e --public include SDL_system.e public include SDL_thread.e public include SDL_timer.e public include SDL_version.e public include SDL_video.e public include SDL_locale.e public include SDL_misc.e --SDL Init Flags public constant SDL_INIT_TIMER = 0x00000001, SDL_INIT_AUDIO = 0x00000010, SDL_INIT_VIDEO = 0x00000020, SDL_INIT_JOYSTICK = 0x00000200, SDL_INIT_HAPTIC = 0x00001000, SDL_INIT_GAMECONTROLLER = 0x00002000, SDL_INIT_EVENTS = 0x00004000, SDL_INIT_SENSOR = 0x00008000, SDL_INIT_NOPARACHUTE = 0x00100000 public constant SDL_INIT_EVERYTHING = or_all({SDL_INIT_TIMER,SDL_INIT_AUDIO,SDL_INIT_VIDEO,SDL_INIT_EVENTS, SDL_INIT_JOYSTICK,SDL_INIT_HAPTIC, SDL_INIT_GAMECONTROLLER,SDL_INIT_SENSOR}) export constant xSDL_Init = define_c_func(sdl,"+SDL_Init",{C_UINT},C_INT) public function SDL_Init(atom flags) return c_func(xSDL_Init,{flags}) end function export constant xSDL_InitSubSystem = define_c_func(sdl,"+SDL_InitSubSystem",{C_UINT},C_INT) public function SDL_InitSubSystem(atom flags) return c_func(xSDL_InitSubSystem,{flags}) end function export constant xSDL_QuitSubSystem = define_c_proc(sdl,"+SDL_QuitSubSystm",{C_UINT}) public procedure SDL_QuitSubSystem(atom flags) c_proc(xSDL_QuitSubSystem,{flags}) end procedure export constant xSDL_WasInit = define_c_func(sdl,"+SDL_WasInit",{C_UINT},C_UINT) public function SDL_WasInit(atom flags) return c_func(xSDL_WasInit,{flags}) end function export constant xSDL_Quit = define_c_proc(sdl,"+SDL_Quit",{}) public procedure SDL_Quit() c_proc(xSDL_Quit,{}) end procedure
--Show CPU Info Demo include sdl.e puts(1,"1 Means True, 0 Means False\n") printf(1,"CPU Count: %d\n",{SDL_GetCPUCount() }) printf(1,"Cache Line Size: %d\n",{SDL_GetCPUCacheLineSize() }) printf(1,"Has RDTSC: %d\n",{SDL_HasRDTSC() }) printf(1,"Has AtltiVec: %d\n",{SDL_HasAltiVec() }) printf(1,"Has MMX:%d\n",{SDL_HasMMX() }) printf(1,"Has 3D Now:%d\n",{SDL_Has3DNow() }) printf(1,"Has SSE:%d\n",{SDL_HasSSE() }) printf(1,"Has SSE2:%d\n",{SDL_HasSSE2() }) printf(1,"Has SSE3:%d\n",{SDL_HasSSE3() }) printf(1,"Has SSE41:%d\n",{SDL_HasSSE41() }) printf(1,"Has SSE42:%d\n",{SDL_HasSSE42() }) printf(1,"Has AVX:%d\n",{SDL_HasAVX() }) printf(1,"Has AVX2:%d\n",{SDL_HasAVX2() }) printf(1,"Has AVX512F:%d\n",{SDL_HasAVX512F() }) printf(1,"Has ARMSIMD:%d\n",{SDL_HasARMSIMD() }) printf(1,"Has NEON:%d\n",{SDL_HasNEON() }) printf(1,"Has LSX:%d\n",{SDL_HasLSX() }) printf(1,"Has LASX:%d\n",{SDL_HasLASX() }) printf(1,"RAM: %d",{SDL_GetSystemRAM() })
--Simple Window --SDL2 Wrapper for Euphoria include std/ffi.e include sdl.e --include SDL_pixels.e constant MAX_WIDTH = 640, MAX_HEIGHT = 480 procedure main() atom win = 0 object surf = {} sequence rect = {} if SDL_Init(SDL_INIT_VIDEO) = -1 then puts(1,"Failed to init SDL!\n") abort(0) end if win = SDL_CreateWindow("Simple Window",SDL_WINDOWPOS_UNDEFINED,SDL_WINDOWPOS_UNDEFINED,MAX_WIDTH,MAX_HEIGHT,SDL_WINDOW_SHOWN) if win = -1 then puts(1,"Failed to create window!\n") abort(0) end if surf = SDL_GetWindowSurface(win) SDL_UpdateWindowSurface(win) SDL_Delay(3000) --3 seconds SDL_DestroyWindow(win) SDL_Quit() end procedure main()
2. Re: SDL 2 Wrapper using FFI
- Posted by Bhupen1277 Oct 21, 2022
- 680 views
Hello Hot viking,
You don't have to call yourself "Icy viking". Everybody knows you are "hot" as far low level programming goes. Will certainly wait for your new version of SDL2 wrapper.