diff options
author | Loïc Hoguin <[email protected]> | 2014-04-03 22:45:34 +0200 |
---|---|---|
committer | Loïc Hoguin <[email protected]> | 2014-04-03 22:45:34 +0200 |
commit | bef3c67f9ca83605730bbd8cc54600b437808491 (patch) | |
tree | 612c8b8571c19943c42b518dab09824dc54ab408 /c_src | |
parent | 6d196614b6134592a3a84eba35c38bb3577a90ae (diff) | |
download | esdl2-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')
-rw-r--r-- | c_src/esdl2.h | 4 | ||||
-rw-r--r-- | c_src/sdl_renderer.c | 33 |
2 files changed, 37 insertions, 0 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) |