aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLoïc Hoguin <[email protected]>2014-04-03 11:24:59 +0200
committerLoïc Hoguin <[email protected]>2014-04-03 11:24:59 +0200
commit40344743774a8e56d60427fc4827883a77880324 (patch)
tree07b2076ab2ace29f1c0423240bf671979a681b50
parent00114c813b6c6829dcf3b6eedc6b45803b31c808 (diff)
downloadesdl2-40344743774a8e56d60427fc4827883a77880324.tar.gz
esdl2-40344743774a8e56d60427fc4827883a77880324.tar.bz2
esdl2-40344743774a8e56d60427fc4827883a77880324.zip
Add sdl_window:create_window_and_renderer/3
-rw-r--r--c_src/esdl2.h3
-rw-r--r--c_src/sdl_window.c34
-rw-r--r--src/esdl2.erl4
-rw-r--r--src/sdl_window.erl5
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.