diff options
author | Loïc Hoguin <[email protected]> | 2014-04-02 14:09:18 +0200 |
---|---|---|
committer | Loïc Hoguin <[email protected]> | 2014-04-02 14:09:18 +0200 |
commit | 77d0e9d9ca8ed451a40f9b54f20365727ad76f5e (patch) | |
tree | 018650dcdf59e7976a1ae018754fd04d4a583ee0 /src | |
parent | 608acbb03f976b0fbf23877d8b4b6ad7529e1d53 (diff) | |
download | esdl2-77d0e9d9ca8ed451a40f9b54f20365727ad76f5e.tar.gz esdl2-77d0e9d9ca8ed451a40f9b54f20365727ad76f5e.tar.bz2 esdl2-77d0e9d9ca8ed451a40f9b54f20365727ad76f5e.zip |
Add a bullet engine example
A function sdl_renderer:set_logical_size/3 has been added.
All the functions relative to the window, the renderer,
textures and events now run in a separate thread inside
the NIF. A few helper functions and macros have been
added in order to abstract this out. The code reads like
it is doing call or cast to the main thread. In the case
of call, the result is then sent back to the calling
process as a message (Erlang side catches it directly
before returning).
The functions relative to SDL init and surfaces have
not been threaded yet. It may still be needed from the
point of view of SDL or Erlang, but it seems to work
fine as it is so they were left alone for now.
The bullet example originally came from my submission to
Spawnfest 2011, and has been reactualized to work with
a modern Erlang, and SDL2.
Diffstat (limited to 'src')
-rw-r--r-- | src/esdl2.erl | 4 | ||||
-rw-r--r-- | src/sdl_events.erl | 3 | ||||
-rw-r--r-- | src/sdl_renderer.erl | 20 | ||||
-rw-r--r-- | src/sdl_texture.erl | 3 | ||||
-rw-r--r-- | src/sdl_window.erl | 3 |
5 files changed, 25 insertions, 8 deletions
diff --git a/src/esdl2.erl b/src/esdl2.erl index a786685..e7d8d0a 100644 --- a/src/esdl2.erl +++ b/src/esdl2.erl @@ -30,6 +30,7 @@ -export([render_clear/1]). -export([render_copy/4]). -export([render_present/1]). +-export([render_set_logical_size/3]). -export([set_render_draw_color/5]). %% sdl_surface @@ -92,6 +93,9 @@ render_copy(_, _, _, _) -> render_present(_) -> erlang:nif_error({not_loaded, ?MODULE}). +render_set_logical_size(_, _, _) -> + erlang:nif_error({not_loaded, ?MODULE}). + set_render_draw_color(_, _, _, _, _) -> erlang:nif_error({not_loaded, ?MODULE}). diff --git a/src/sdl_events.erl b/src/sdl_events.erl index 2cd6c3f..a4710a5 100644 --- a/src/sdl_events.erl +++ b/src/sdl_events.erl @@ -17,4 +17,5 @@ -export([poll/0]). poll() -> - esdl2:poll_event(). + esdl2:poll_event(), + receive {'_nif_thread_ret_', Ret} -> Ret end. diff --git a/src/sdl_renderer.erl b/src/sdl_renderer.erl index 2fff74f..0a66838 100644 --- a/src/sdl_renderer.erl +++ b/src/sdl_renderer.erl @@ -20,21 +20,31 @@ -export([copy/4]). -export([present/1]). -export([set_draw_color/5]). +-export([set_logical_size/3]). create(Window, Index, Flags) -> - esdl2:create_renderer(Window, Index, Flags). + esdl2:create_renderer(Window, Index, Flags), + receive {'_nif_thread_ret_', Ret} -> Ret end. clear(Renderer) -> - esdl2:render_clear(Renderer). + esdl2:render_clear(Renderer), + receive {'_nif_thread_ret_', Ret} -> Ret end. copy(Renderer, Texture) -> - esdl2:render_copy(Renderer, Texture, undefined, undefined). + esdl2:render_copy(Renderer, Texture, undefined, undefined), + receive {'_nif_thread_ret_', Ret} -> Ret end. copy(Renderer, Texture, SrcRect, DstRect) -> - esdl2:render_copy(Renderer, Texture, SrcRect, DstRect). + esdl2:render_copy(Renderer, Texture, SrcRect, DstRect), + receive {'_nif_thread_ret_', Ret} -> Ret end. present(Renderer) -> esdl2:render_present(Renderer). set_draw_color(Renderer, R, G, B, A) -> - esdl2:set_render_draw_color(Renderer, R, G, B, A). + esdl2:set_render_draw_color(Renderer, R, G, B, A), + receive {'_nif_thread_ret_', Ret} -> Ret end. + +set_logical_size(Renderer, W, H) -> + esdl2:render_set_logical_size(Renderer, W, H), + receive {'_nif_thread_ret_', Ret} -> Ret end. diff --git a/src/sdl_texture.erl b/src/sdl_texture.erl index f181bc1..29c3018 100644 --- a/src/sdl_texture.erl +++ b/src/sdl_texture.erl @@ -22,4 +22,5 @@ create_from_file(Renderer, Filename) -> create_from_surface(Renderer, Surface). create_from_surface(Renderer, Surface) -> - esdl2:create_texture_from_surface(Renderer, Surface). + esdl2:create_texture_from_surface(Renderer, Surface), + receive {'_nif_thread_ret_', Ret} -> Ret end. diff --git a/src/sdl_window.erl b/src/sdl_window.erl index 649ad8a..fbb7542 100644 --- a/src/sdl_window.erl +++ b/src/sdl_window.erl @@ -17,4 +17,5 @@ -export([create/6]). create(Title, X, Y, W, H, Flags) -> - esdl2:create_window(Title, X, Y, W, H, Flags). + esdl2:create_window(Title, X, Y, W, H, Flags), + receive {'_nif_thread_ret_', Ret} -> Ret end. |