diff options
Diffstat (limited to 'examples/hello_sdl/hello_sdl.erl')
-rw-r--r-- | examples/hello_sdl/hello_sdl.erl | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/examples/hello_sdl/hello_sdl.erl b/examples/hello_sdl/hello_sdl.erl new file mode 100644 index 0000000..4e06baf --- /dev/null +++ b/examples/hello_sdl/hello_sdl.erl @@ -0,0 +1,37 @@ +%% This is an example. Feel free to copy and reuse as you wish. + +-module(hello_sdl). +-export([run/0]). + +run() -> + spawn_opt(fun init/0, [{scheduler, 0}]). + +init() -> + ok = sdl:start([video]), + ok = sdl:stop_on_exit(), + {ok, Window} = sdl_window:create("Hello SDL", 10, 10, 500, 500, []), + {ok, Renderer} = sdl_renderer:create(Window, -1, [accelerated, present_vsync]), + ok = sdl_renderer:set_draw_color(Renderer, 255, 255, 255, 255), + {ok, Texture} = sdl_texture:create_from_file(Renderer, "erlang.png"), + loop(#{window=>Window, renderer=>Renderer, texture=>Texture}). + +loop(State) -> + events_loop(), + render(State), + loop(State). + +events_loop() -> + case sdl_events:poll() of + false -> ok; + #{type:=quit} -> terminate(); + _ -> events_loop() + end. + +render(#{renderer:=Renderer, texture:=Texture}) -> + ok = sdl_renderer:clear(Renderer), + ok = sdl_renderer:copy(Renderer, Texture, undefined, #{x=>100, y=>100, w=>300, h=>300}), + ok = sdl_renderer:present(Renderer). + +terminate() -> + init:stop(), + exit(normal). |