aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/esdl2.erl8
-rw-r--r--src/sdl_blend_mode.erl36
-rw-r--r--src/sdl_renderer.erl7
3 files changed, 46 insertions, 5 deletions
diff --git a/src/esdl2.erl b/src/esdl2.erl
index e18a7fc..815c12c 100644
--- a/src/esdl2.erl
+++ b/src/esdl2.erl
@@ -25,6 +25,9 @@
-export([set_main_ready/0]).
-export([was_init/1]).
+%% sdl_blendmode
+-export([compose_custom_blend_mode/6]).
+
%% sdl_clipboard
-export([get_clipboard_text/0]).
-export([has_clipboard_text/0]).
@@ -200,6 +203,11 @@ set_main_ready() ->
was_init(_) ->
erlang:nif_error({not_loaded, ?MODULE}).
+%% sdl_blendmode
+
+compose_custom_blend_mode(_, _, _, _, _, _) ->
+ erlang:nif_error({not_loaded, ?MODULE}).
+
%% sdl_clipboard
get_clipboard_text() ->
diff --git a/src/sdl_blend_mode.erl b/src/sdl_blend_mode.erl
new file mode 100644
index 0000000..ce6b854
--- /dev/null
+++ b/src/sdl_blend_mode.erl
@@ -0,0 +1,36 @@
+%% Copyright (c) 2017, Loïc Hoguin <[email protected]>
+%%
+%% Permission to use, copy, modify, and/or distribute this software for any
+%% purpose with or without fee is hereby granted, provided that the above
+%% copyright notice and this permission notice appear in all copies.
+%%
+%% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+%% WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+%% MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+%% ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+%% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+%% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+%% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+-module(sdl_blend_mode).
+
+-export([compose/6]).
+
+-type blend_mode() :: none | blend | add | mod | invalid | integer().
+-export_type([blend_mode/0]).
+
+-type blend_operation() :: add | substract | rev_substract | minimum | maximum.
+-type blend_factor() :: zero | one
+ | src_color | one_minus_src_color
+ | src_alpha | one_minus_src_alpha
+ | dst_color | one_minus_dst_color
+ | dst_alpha | one_minus_dst_alpha.
+
+-spec compose(blend_factor(), blend_factor(), blend_operation(),
+ blend_factor(), blend_factor(), blend_operation()) -> blend_mode().
+compose(SrcColorFactor, DstColorFactor, ColorOp,
+ SrcAlphaFactor, DstAlphaFactor, AlphaOp) ->
+ esdl2:compose_custom_blend_mode(
+ SrcColorFactor, DstColorFactor, ColorOp,
+ SrcAlphaFactor, DstAlphaFactor, AlphaOp),
+ receive {'_nif_thread_ret_', Ret} -> Ret end.
diff --git a/src/sdl_renderer.erl b/src/sdl_renderer.erl
index 9727743..8bf51fc 100644
--- a/src/sdl_renderer.erl
+++ b/src/sdl_renderer.erl
@@ -59,9 +59,6 @@
-type point() :: #{x=>integer(), y=>integer()}.
-type rect() :: #{x=>integer(), y=>integer(), w=>integer(), h=>integer()}.
--type blend_mode() :: none | blend | add | mod.
--export_type([blend_mode/0]).
-
-spec clear(renderer()) -> ok | sdl:error().
clear(Renderer) ->
esdl2:render_clear(Renderer),
@@ -157,7 +154,7 @@ get_clip_rect(Renderer) ->
esdl2:render_get_clip_rect(Renderer),
receive {'_nif_thread_ret_', Ret} -> Ret end.
--spec get_draw_blend_mode(renderer()) -> blend_mode().
+-spec get_draw_blend_mode(renderer()) -> sdl_blend_mode:blend_mode().
get_draw_blend_mode(Renderer) ->
esdl2:get_render_draw_blend_mode(Renderer),
receive {'_nif_thread_ret_', Ret} ->
@@ -214,7 +211,7 @@ 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.
--spec set_draw_blend_mode(renderer(), blend_mode()) -> ok | sdl:error().
+-spec set_draw_blend_mode(renderer(), sdl_blend_mode:blend_mode()) -> ok | sdl:error().
set_draw_blend_mode(Renderer, BlendMode) ->
esdl2:set_render_draw_blend_mode(Renderer, BlendMode),
receive {'_nif_thread_ret_', Ret} -> Ret end.