Skip to content

JupiterRider/purego-sdl3

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

purego-sdl3

Go Reference

A cgo-free SDL3 binding.

About

This library doesn't require cgo. It uses dynamic loading with the help of 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:

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)
	}
}