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 | |
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!
-rw-r--r-- | c_src/esdl2.h | 4 | ||||
-rw-r--r-- | c_src/sdl_renderer.c | 33 | ||||
-rw-r--r-- | src/esdl2.erl | 4 | ||||
-rw-r--r-- | src/sdl_renderer.erl | 17 |
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). |