aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLoïc Hoguin <[email protected]>2014-04-07 17:37:57 +0200
committerLoïc Hoguin <[email protected]>2014-04-07 17:37:57 +0200
commit01a9d5eeb3e1e77239b5daef9895719f25bd9b9f (patch)
tree906ca32090bfe1b1b24db86469bfbbadb19c3508
parent6cadd2f4bd051c9fbb9686597a7e7249ac60da90 (diff)
downloadesdl2-01a9d5eeb3e1e77239b5daef9895719f25bd9b9f.tar.gz
esdl2-01a9d5eeb3e1e77239b5daef9895719f25bd9b9f.tar.bz2
esdl2-01a9d5eeb3e1e77239b5daef9895719f25bd9b9f.zip
Add sdl_renderer:set_draw_blend_mode/2
-rw-r--r--c_src/esdl2.h1
-rw-r--r--c_src/sdl_renderer.c23
-rw-r--r--src/esdl2.erl4
-rw-r--r--src/sdl_renderer.erl5
4 files changed, 33 insertions, 0 deletions
diff --git a/c_src/esdl2.h b/c_src/esdl2.h
index dde4f82..3afef48 100644
--- a/c_src/esdl2.h
+++ b/c_src/esdl2.h
@@ -191,6 +191,7 @@
F(render_set_scale, 3) \
F(render_set_viewport, 5) \
F(render_target_supported, 1) \
+ F(set_render_draw_blend_mode, 2) \
F(set_render_draw_color, 5) \
/* sdl_surface */ \
F(img_load, 1) \
diff --git a/c_src/sdl_renderer.c b/c_src/sdl_renderer.c
index 0da13d1..57428a7 100644
--- a/c_src/sdl_renderer.c
+++ b/c_src/sdl_renderer.c
@@ -33,6 +33,7 @@ NIF_LIST_TO_FLAGS_FUNCTION(list_to_renderer_flags, Uint32, RENDERER_FLAGS)
E(add, SDL_BLENDMODE_ADD) \
E(mod, SDL_BLENDMODE_MOD)
+NIF_ATOM_TO_ENUM_FUNCTION(atom_to_blend_mode, SDL_BlendMode, BLEND_MODE_ENUM)
NIF_ENUM_TO_ATOM_FUNCTION(blend_mode_to_atom, SDL_BlendMode, BLEND_MODE_ENUM)
#define FLIP_FLAGS(F) \
@@ -895,6 +896,28 @@ NIF_FUNCTION(render_target_supported)
NIF_RES_GET(Renderer, renderer_res));
}
+// set_render_draw_blend_mode
+
+NIF_CALL_HANDLER(thread_set_render_draw_blend_mode)
+{
+ if (SDL_SetRenderDrawBlendMode(args[0], (long)args[1]))
+ return sdl_error_tuple(env);
+
+ return atom_ok;
+}
+
+NIF_FUNCTION(set_render_draw_blend_mode)
+{
+ void* renderer_res;
+ SDL_BlendMode mode;
+
+ BADARG_IF(!enif_get_resource(env, argv[0], res_Renderer, &renderer_res));
+ BADARG_IF(!atom_to_blend_mode(env, argv[1], &mode));
+
+ return nif_thread_call(env, thread_set_render_draw_blend_mode, 2,
+ NIF_RES_GET(Renderer, renderer_res), mode);
+}
+
// set_render_draw_color
NIF_CALL_HANDLER(thread_set_render_draw_color)
diff --git a/src/esdl2.erl b/src/esdl2.erl
index 2f7101d..5631512 100644
--- a/src/esdl2.erl
+++ b/src/esdl2.erl
@@ -79,6 +79,7 @@
-export([render_set_scale/3]).
-export([render_set_viewport/5]).
-export([render_target_supported/1]).
+-export([set_render_draw_blend_mode/2]).
-export([set_render_draw_color/5]).
%% sdl_surface
@@ -303,6 +304,9 @@ render_set_viewport(_, _, _, _, _) ->
render_target_supported(_) ->
erlang:nif_error({not_loaded, ?MODULE}).
+set_render_draw_blend_mode(_, _) ->
+ erlang:nif_error({not_loaded, ?MODULE}).
+
set_render_draw_color(_, _, _, _, _) ->
erlang:nif_error({not_loaded, ?MODULE}).
diff --git a/src/sdl_renderer.erl b/src/sdl_renderer.erl
index e6c6810..66117cb 100644
--- a/src/sdl_renderer.erl
+++ b/src/sdl_renderer.erl
@@ -43,6 +43,7 @@
-export([present/1]).
-export([set_clip_rect/2]).
-export([set_clip_rect/5]).
+-export([set_draw_blend_mode/2]).
-export([set_draw_color/5]).
-export([set_logical_size/3]).
-export([set_scale/3]).
@@ -168,6 +169,10 @@ set_clip_rect(Renderer, X, Y, W, H) ->
esdl2:render_set_clip_rect(Renderer, X, Y, W, H),
receive {'_nif_thread_ret_', Ret} -> Ret end.
+set_draw_blend_mode(Renderer, BlendMode) ->
+ esdl2:set_render_draw_blend_mode(Renderer, BlendMode),
+ receive {'_nif_thread_ret_', Ret} -> Ret end.
+
set_draw_color(Renderer, R, G, B, A) ->
esdl2:set_render_draw_color(Renderer, R, G, B, A),
receive {'_nif_thread_ret_', Ret} -> Ret end.