diff options
author | Loïc Hoguin <[email protected]> | 2014-04-03 11:24:59 +0200 |
---|---|---|
committer | Loïc Hoguin <[email protected]> | 2014-04-03 11:24:59 +0200 |
commit | 40344743774a8e56d60427fc4827883a77880324 (patch) | |
tree | 07b2076ab2ace29f1c0423240bf671979a681b50 | |
parent | 00114c813b6c6829dcf3b6eedc6b45803b31c808 (diff) | |
download | esdl2-40344743774a8e56d60427fc4827883a77880324.tar.gz esdl2-40344743774a8e56d60427fc4827883a77880324.tar.bz2 esdl2-40344743774a8e56d60427fc4827883a77880324.zip |
Add sdl_window:create_window_and_renderer/3
-rw-r--r-- | c_src/esdl2.h | 3 | ||||
-rw-r--r-- | c_src/sdl_window.c | 34 | ||||
-rw-r--r-- | src/esdl2.erl | 4 | ||||
-rw-r--r-- | src/sdl_window.erl | 5 |
4 files changed, 45 insertions, 1 deletions
diff --git a/c_src/esdl2.h b/c_src/esdl2.h index 7a5346d..390d771 100644 --- a/c_src/esdl2.h +++ b/c_src/esdl2.h @@ -149,7 +149,8 @@ F(get_version, 0) \ F(get_revision, 0) \ /* sdl_window */ \ - F(create_window, 6) + F(create_window, 6) \ + F(create_window_and_renderer, 3) \ // Generated declarations for the NIF. diff --git a/c_src/sdl_window.c b/c_src/sdl_window.c index 9319270..aed5b8b 100644 --- a/c_src/sdl_window.c +++ b/c_src/sdl_window.c @@ -75,3 +75,37 @@ NIF_FUNCTION(create_window) return nif_thread_call(env, thread_create_window, 6, title, x, y, w, h, flags); } + +// create_window_and_renderer + +NIF_CALL_HANDLER(thread_create_window_and_renderer) +{ + SDL_Window* window; + SDL_Renderer* renderer; + ERL_NIF_TERM wterm, rterm; + + if (0 != SDL_CreateWindowAndRenderer((long)args[0], (long)args[1], (long)args[2], &window, &renderer)) + return sdl_error_tuple(env); + + NIF_RES_TO_TERM(Window, window, wterm); + NIF_RES_TO_TERM(Renderer, renderer, rterm); + + return enif_make_tuple3(env, + atom_ok, + wterm, + rterm + ); +} + +NIF_FUNCTION(create_window_and_renderer) +{ + int w, h; + Uint32 flags = 0; + + BADARG_IF(!enif_get_int(env, argv[0], &w)); + BADARG_IF(!enif_get_int(env, argv[1], &h)); + BADARG_IF(!list_to_window_flags(env, argv[2], &flags)); + + return nif_thread_call(env, thread_create_window_and_renderer, 3, + w, h, flags); +} diff --git a/src/esdl2.erl b/src/esdl2.erl index 23b157a..d7f4ebf 100644 --- a/src/esdl2.erl +++ b/src/esdl2.erl @@ -72,6 +72,7 @@ %% sdl_window -export([create_window/6]). +-export([create_window_and_renderer/3]). %% @todo We probably want to accept an env variable or somthing for the location. -on_load(on_load/0). @@ -217,3 +218,6 @@ get_revision() -> create_window(_, _, _, _, _, _) -> erlang:nif_error({not_loaded, ?MODULE}). + +create_window_and_renderer(_, _, _) -> + erlang:nif_error({not_loaded, ?MODULE}). diff --git a/src/sdl_window.erl b/src/sdl_window.erl index fbb7542..72f0e19 100644 --- a/src/sdl_window.erl +++ b/src/sdl_window.erl @@ -15,7 +15,12 @@ -module(sdl_window). -export([create/6]). +-export([create_window_and_renderer/3]). create(Title, X, Y, W, H, Flags) -> esdl2:create_window(Title, X, Y, W, H, Flags), receive {'_nif_thread_ret_', Ret} -> Ret end. + +create_window_and_renderer(W, H, Flags) -> + esdl2:create_window_and_renderer(W, H, Flags), + receive {'_nif_thread_ret_', Ret} -> Ret end. |