https://github.com/juliamultimedia/simpledirectmedialayer.jl
SDL2
https://github.com/juliamultimedia/simpledirectmedialayer.jl
julia sdl sdl2
Last synced: 14 days ago
JSON representation
SDL2
- Host: GitHub
- URL: https://github.com/juliamultimedia/simpledirectmedialayer.jl
- Owner: JuliaMultimedia
- License: mit
- Created: 2017-09-26T19:23:41.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2024-07-21T19:39:43.000Z (11 months ago)
- Last Synced: 2025-06-15T22:29:49.220Z (15 days ago)
- Topics: julia, sdl, sdl2
- Language: Julia
- Homepage:
- Size: 864 KB
- Stars: 82
- Watchers: 5
- Forks: 17
- Open Issues: 14
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Simple DirectMedia Layer
[](https://github.com/JuliaMultimedia/SimpleDirectMediaLayer.jl/actions/workflows/ci.yml)
[](https://github.com/JuliaMultimedia/SimpleDirectMediaLayer.jl/actions/workflows/TagBot.yml)
[](https://coveralls.io/github/jonathanBieler/SimpleDirectMediaLayer.jl?branch=master)
[](https://juliahub.com/ui/Packages/SimpleDirectMediaLayer/vVozl)
[](https://juliahub.com/ui/Packages/SimpleDirectMediaLayer/vVozl)
[](https://juliahub.com/ui/Packages/SimpleDirectMediaLayer/vVozl?t=2)
[](https://pkgs.genieframework.com?packages=SimpleDirectMediaLayer)Bindings for the [Simple DirectMedia Layer](https://www.libsdl.org/) library. The bindings were generated using [Clang.jl](https://github.com/JuliaInterop/Clang.jl). Documentation can be found on the [SDL wiki](https://wiki.libsdl.org/FrontPage).
## Installation
```julia
pkg> add SimpleDirectMediaLayer
```
For Linux users, you probably need to manually config the environment variable `ALSA_CONFIG_PATH`. If the path is empty, the default value `/usr/share/alsa/alsa.conf` will be used. Please refer to https://github.com/JuliaPackaging/Yggdrasil/issues/1432 for more details.## Quick start
```julia
using SimpleDirectMediaLayer
using SimpleDirectMediaLayer.LibSDL2SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 16)
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, 16)@assert SDL_Init(SDL_INIT_EVERYTHING) == 0 "error initializing SDL: $(unsafe_string(SDL_GetError()))"
win = SDL_CreateWindow("Game", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 1000, 1000, SDL_WINDOW_SHOWN)
SDL_SetWindowResizable(win, SDL_TRUE)renderer = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC)
surface = IMG_Load(joinpath(dirname(pathof(SimpleDirectMediaLayer)), "..", "assets", "cat.png"))
tex = SDL_CreateTextureFromSurface(renderer, surface)
SDL_FreeSurface(surface)w_ref, h_ref = Ref{Cint}(0), Ref{Cint}(0)
SDL_QueryTexture(tex, C_NULL, C_NULL, w_ref, h_ref)try
w, h = w_ref[], h_ref[]
x = (1000 - w) ÷ 2
y = (1000 - h) ÷ 2
dest_ref = Ref(SDL_Rect(x, y, w, h))
close = false
speed = 300
while !close
event_ref = Ref{SDL_Event}()
while Bool(SDL_PollEvent(event_ref))
evt = event_ref[]
evt_ty = evt.type
if evt_ty == SDL_QUIT
close = true
break
elseif evt_ty == SDL_KEYDOWN
scan_code = evt.key.keysym.scancode
if scan_code == SDL_SCANCODE_W || scan_code == SDL_SCANCODE_UP
y -= speed / 30
break
elseif scan_code == SDL_SCANCODE_A || scan_code == SDL_SCANCODE_LEFT
x -= speed / 30
break
elseif scan_code == SDL_SCANCODE_S || scan_code == SDL_SCANCODE_DOWN
y += speed / 30
break
elseif scan_code == SDL_SCANCODE_D || scan_code == SDL_SCANCODE_RIGHT
x += speed / 30
break
else
break
end
end
endx + w > 1000 && (x = 1000 - w;)
x < 0 && (x = 0;)
y + h > 1000 && (y = 1000 - h;)
y < 0 && (y = 0;)dest_ref[] = SDL_Rect(x, y, w, h)
SDL_RenderClear(renderer)
SDL_RenderCopy(renderer, tex, C_NULL, dest_ref)
dest = dest_ref[]
x, y, w, h = dest.x, dest.y, dest.w, dest.h
SDL_RenderPresent(renderer)SDL_Delay(1000 ÷ 60)
end
finally
SDL_DestroyTexture(tex)
SDL_DestroyRenderer(renderer)
SDL_DestroyWindow(win)
SDL_Quit()
end
```