aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLoïc Hoguin <[email protected]>2014-04-03 22:45:34 +0200
committerLoïc Hoguin <[email protected]>2014-04-03 22:45:34 +0200
commitbef3c67f9ca83605730bbd8cc54600b437808491 (patch)
tree612c8b8571c19943c42b518dab09824dc54ab408
parent6d196614b6134592a3a84eba35c38bb3577a90ae (diff)
downloadesdl2-bef3c67f9ca83605730bbd8cc54600b437808491.tar.gz
esdl2-bef3c67f9ca83605730bbd8cc54600b437808491.tar.bz2
esdl2-bef3c67f9ca83605730bbd8cc54600b437808491.zip
Add sdl_renderer:get_draw_blend_mode/1
Also changed a little the count_drivers/0 function to return the result directly instead of {ok, Count}. Let it crash!
-rw-r--r--c_src/esdl2.h4
-rw-r--r--c_src/sdl_renderer.c33
-rw-r--r--src/esdl2.erl4
-rw-r--r--src/sdl_renderer.erl17
4 files changed, 54 insertions, 4 deletions
diff --git a/c_src/esdl2.h b/c_src/esdl2.h
index b4a5ad4..1f0ee3c 100644
--- a/c_src/esdl2.h
+++ b/c_src/esdl2.h
@@ -20,7 +20,9 @@
// List of atoms used by this NIF.
#define NIF_ATOMS(A) \
+ A(add) \
A(allow_high_dpi) \
+ A(blend) \
A(borderless) \
A(button) \
A(caps) \
@@ -63,6 +65,7 @@
A(mouse_wheel) \
A(moved) \
A(no_battery) \
+ A(none) \
A(num) \
A(on_battery) \
A(opengl) \
@@ -147,6 +150,7 @@
/* sdl_renderer */ \
F(create_renderer, 3) \
F(get_num_render_drivers, 0) \
+ F(get_render_draw_blend_mode, 1) \
F(render_clear, 1) \
F(render_copy, 4) \
F(render_present, 1) \
diff --git a/c_src/sdl_renderer.c b/c_src/sdl_renderer.c
index 023851f..5f90f14 100644
--- a/c_src/sdl_renderer.c
+++ b/c_src/sdl_renderer.c
@@ -27,6 +27,14 @@ void dtor_Renderer(ErlNifEnv* env, void* obj)
NIF_LIST_TO_FLAGS_FUNCTION(list_to_renderer_flags, Uint32, RENDERER_FLAGS)
+#define BLEND_MODE_ENUM(E) \
+ E(none, SDL_BLENDMODE_NONE) \
+ E(blend, SDL_BLENDMODE_BLEND) \
+ E(add, SDL_BLENDMODE_ADD) \
+ E(mod, SDL_BLENDMODE_MOD)
+
+NIF_ENUM_TO_ATOM_FUNCTION(blend_mode_to_atom, SDL_BlendMode, BLEND_MODE_ENUM)
+
int map_to_rect(ErlNifEnv* env, ERL_NIF_TERM map, SDL_Rect* rect)
{
ERL_NIF_TERM x, y, w, h;
@@ -100,6 +108,31 @@ NIF_FUNCTION(get_num_render_drivers)
);
}
+// get_render_draw_blend_mode
+
+NIF_CALL_HANDLER(thread_get_render_draw_blend_mode)
+{
+ SDL_BlendMode mode;
+
+ if (SDL_GetRenderDrawBlendMode(args[0], &mode))
+ return sdl_error_tuple(env);
+
+ return enif_make_tuple2(env,
+ atom_ok,
+ blend_mode_to_atom(mode)
+ );
+}
+
+NIF_FUNCTION(get_render_draw_blend_mode)
+{
+ void* renderer_res;
+
+ BADARG_IF(!enif_get_resource(env, argv[0], res_Renderer, &renderer_res));
+
+ return nif_thread_call(env, thread_get_render_draw_blend_mode, 1,
+ NIF_RES_GET(Renderer, renderer_res));
+}
+
// render_clear
NIF_CALL_HANDLER(thread_render_clear)
diff --git a/src/esdl2.erl b/src/esdl2.erl
index aa685ac..add7453 100644
--- a/src/esdl2.erl
+++ b/src/esdl2.erl
@@ -55,6 +55,7 @@
%% sdl_renderer
-export([create_renderer/3]).
-export([get_num_render_drivers/0]).
+-export([get_render_draw_blend_mode/1]).
-export([render_clear/1]).
-export([render_copy/4]).
-export([render_present/1]).
@@ -211,6 +212,9 @@ create_renderer(_, _, _) ->
get_num_render_drivers() ->
erlang:nif_error({not_loaded, ?MODULE}).
+get_render_draw_blend_mode(_) ->
+ erlang:nif_error({not_loaded, ?MODULE}).
+
render_clear(_) ->
erlang:nif_error({not_loaded, ?MODULE}).
diff --git a/src/sdl_renderer.erl b/src/sdl_renderer.erl
index 6abd626..18c368c 100644
--- a/src/sdl_renderer.erl
+++ b/src/sdl_renderer.erl
@@ -15,10 +15,11 @@
-module(sdl_renderer).
-export([create/3]).
+-export([count_drivers/0]).
+-export([get_draw_blend_mode/1]).
-export([clear/1]).
-export([copy/2]).
-export([copy/4]).
--export([count_drivers/0]).
-export([present/1]).
-export([set_draw_color/5]).
-export([set_logical_size/3]).
@@ -27,6 +28,17 @@ create(Window, Index, Flags) ->
esdl2:create_renderer(Window, Index, Flags),
receive {'_nif_thread_ret_', Ret} -> Ret end.
+count_drivers() ->
+ {ok, Count} = esdl2:get_num_render_drivers(),
+ Count.
+
+get_draw_blend_mode(Renderer) ->
+ esdl2:get_render_draw_blend_mode(Renderer),
+ receive {'_nif_thread_ret_', Ret} ->
+ {ok, Mode} = Ret,
+ Mode
+ end.
+
clear(Renderer) ->
esdl2:render_clear(Renderer),
receive {'_nif_thread_ret_', Ret} -> Ret end.
@@ -39,9 +51,6 @@ copy(Renderer, Texture, SrcRect, DstRect) ->
esdl2:render_copy(Renderer, Texture, SrcRect, DstRect),
receive {'_nif_thread_ret_', Ret} -> Ret end.
-count_drivers() ->
- esdl2:get_num_render_drivers().
-
present(Renderer) ->
esdl2:render_present(Renderer).