aboutsummaryrefslogtreecommitdiffstats
path: root/c_src/sdl_renderer.c
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 /c_src/sdl_renderer.c
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!
Diffstat (limited to 'c_src/sdl_renderer.c')
-rw-r--r--c_src/sdl_renderer.c33
1 files changed, 33 insertions, 0 deletions
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)