From 01a9d5eeb3e1e77239b5daef9895719f25bd9b9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Hoguin?= Date: Mon, 7 Apr 2014 17:37:57 +0200 Subject: Add sdl_renderer:set_draw_blend_mode/2 --- c_src/esdl2.h | 1 + c_src/sdl_renderer.c | 23 +++++++++++++++++++++++ src/esdl2.erl | 4 ++++ src/sdl_renderer.erl | 5 +++++ 4 files changed, 33 insertions(+) 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. -- cgit v1.2.3