https://github.com/jupiterrider/purego-sdl3
A cgo-free SDL3 binding.
https://github.com/jupiterrider/purego-sdl3
binding freebsd game-development go golang linux macos sdl3 windows
Last synced: 4 months ago
JSON representation
A cgo-free SDL3 binding.
- Host: GitHub
- URL: https://github.com/jupiterrider/purego-sdl3
- Owner: JupiterRider
- License: unlicense
- Created: 2025-01-25T17:49:18.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2025-10-05T10:52:56.000Z (4 months ago)
- Last Synced: 2025-10-05T12:26:33.811Z (4 months ago)
- Topics: binding, freebsd, game-development, go, golang, linux, macos, sdl3, windows
- Language: Go
- Homepage:
- Size: 1.53 MB
- Stars: 106
- Watchers: 8
- Forks: 12
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Copyright: COPYRIGHT.txt
Awesome Lists containing this project
README
# purego-sdl3
[](https://pkg.go.dev/github.com/jupiterrider/purego-sdl3)
A cgo-free SDL3 binding.
## About
This library doesn't require cgo. It uses [dynamic loading](https://en.wikipedia.org/wiki/Dynamic_loading) with the help of [purego](https://github.com/ebitengine/purego).
## Status
This project is in an early stage and not all functions/types are implemented yet. But the ones you see are usable and stable.
## Requirements
You need to have SDL3 (at least version 3.2.0) installed as shared library. That means at runtime, it is trying to load SDL:
- macOS: `libSDL3.dylib`
- Linux and FreeBSD: `libSDL3.so.0`
- Windows: `SDL3.dll`
Only the above-mentioned operating systems with AMD64 or ARM64 architecture are supported.
## Example
This simple example just opens a resizable window with a blue background:
```golang
package main
import "github.com/jupiterrider/purego-sdl3/sdl"
func main() {
if !sdl.SetHint(sdl.HintRenderVSync, "1") {
panic(sdl.GetError())
}
defer sdl.Quit()
if !sdl.Init(sdl.InitVideo) {
panic(sdl.GetError())
}
var window *sdl.Window
var renderer *sdl.Renderer
if !sdl.CreateWindowAndRenderer("Hello, World!", 1280, 720, sdl.WindowResizable, &window, &renderer) {
panic(sdl.GetError())
}
defer sdl.DestroyRenderer(renderer)
defer sdl.DestroyWindow(window)
sdl.SetRenderDrawColor(renderer, 100, 150, 200, 255)
Outer:
for {
var event sdl.Event
for sdl.PollEvent(&event) {
switch event.Type() {
case sdl.EventQuit:
break Outer
case sdl.EventKeyDown:
if event.Key().Scancode == sdl.ScancodeEscape {
break Outer
}
}
}
sdl.RenderClear(renderer)
sdl.RenderPresent(renderer)
}
}
```