# sokol-luajit A luajit set of ffi wrappers for the excellent sokol framework, - [x] Win64 Binaries - samples and remotery working - [X] Linux64 Binaries - samples and remotery working - [ ] MacOS Binaries - incomplete. Testing and Fixing ongoing. Expected completion soon. ## Sokol The repo is based entirely on the brilliant framework here: https://github.com/floooh/sokol sdf exmample ![alt text](https://github.com/dlannan/sokol-luajit/blob/main/media/2024-10-30_11-48.png "sdf Example") Some of the source files have been modified to support shared libraries a little better and make the binding of ffi a little easier. There are only small changes, but this is kept in this location - do not use as a source for sokol itself. https://github.com/dlannan/sokol The build process builds Win, Linux, Mac OSX, IOS but not Android atm. I need to build a shared library mechansim for this to work well. Thus, the build for it currently fails. ## Luajit Sokol The only provided main luajit binaries are for win64. To run other platforms, please build luajit for your platform and place in the bin/ directory. You will also need to modify the paths at the top of the samples lua scripts to match. I will update this to be more friendly in the future (by using ffi.os). The Wasm part of sokol might not be able to be utilized in this manner. However I do have plans to compile Luajit->wasm and embed sokol generated bytecode. It should be possible, but that is along term goal. ## Examples I have ported 5 examples from sokol, and will be adding more. These show how the ffi interface can be used. How to use the example. Open a command window or powershell in the repo folder (Win64 powershell shown below) ``` PS sokol-luajit> cd .\examples\ PS sokol-luajit\examples> .\run_sample.bat cube_sapp ``` Some notes: - There are a number of objects that must be created as pointers. In ffi the easiest way to do this is to make an array object of size 1 and this way the handle in lua is a pointer and the object access uses the array indexing. - No performance considerations have been taken into account. These are almost direct 1 to 1 mappings of the sokol C samples to luajit samples. - pathing is not yet made friendly. Use the run_sample bat file with one of the following parameters: | Command | Description | |---------|-------------| |```cube_sapp``` | Simple spinning cube | |```shadow_sapp``` | Shadowed cube with moving light | |```shapes_sapp``` | Primitive shapes spinning | |```triangle_sapp``` | Classic triangle | |```offscreen_sapp``` | Sphere with render texture torii? spinning on its surface. | |```nuklear_sapp``` | Nuklear GUI demo | |```sdf_sapp``` | SDF from the Sokol samples | |```remotery_cube```| A spinning cube with Remotery backend. Go to /tools/remotery/vis and open index.html in your browser. | Feel free to contribute or post issues/ideas comment. I put this together yesterday, and its very rudimentary atm. Screenshots: cimgui example ![alt text](https://github.com/dlannan/sokol-luajit/blob/main/media/cimgui_sapp.png "cimgui Example") nuklear example ![alt text](https://github.com/dlannan/sokol-luajit/blob/main/media/nuklear_sapp.png "nuklear Example") offscreen example ![alt text](https://github.com/dlannan/sokol-luajit/blob/main/media/offscreen_sappjpeg.jpeg "offscreen Example") shadow example