aboutsummaryrefslogtreecommitdiffstats
path: root/src/sdl_renderer.erl
diff options
context:
space:
mode:
authorLoïc Hoguin <[email protected]>2014-04-02 14:09:18 +0200
committerLoïc Hoguin <[email protected]>2014-04-02 14:09:18 +0200
commit77d0e9d9ca8ed451a40f9b54f20365727ad76f5e (patch)
tree018650dcdf59e7976a1ae018754fd04d4a583ee0 /src/sdl_renderer.erl
parent608acbb03f976b0fbf23877d8b4b6ad7529e1d53 (diff)
downloadesdl2-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/sdl_renderer.erl')
-rw-r--r--src/sdl_renderer.erl20
1 files changed, 15 insertions, 5 deletions
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.