Packages

Simple and elegant vulkan renderer

Current section

Files

Jump to
fluo src fluo@window.erl
Raw

src/fluo@window.erl

-module(fluo@window).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/fluo/window.gleam").
-export([window_should_close/1, poll_events/1, keys_down/1, mouse_position/1, mouse_delta/1, swap/2, delta/1, create_window/3, present/1, width/1, height/1, title/1, color/1, depth/1, loop/3]).
-export_type([window/0, key/0, position/0, context/1]).
-opaque window() :: {window,
integer(),
integer(),
binary(),
fluo@image:color_image(),
fluo@image:depth_image(),
gleam@dynamic:dynamic_()}.
-type key() :: key_a |
key_b |
key_c |
key_d |
key_e |
key_f |
key_g |
key_h |
key_i |
key_j |
key_k |
key_l |
key_m |
key_n |
key_o |
key_p |
key_q |
key_r |
key_s |
key_t |
key_u |
key_v |
key_w |
key_x |
key_y |
key_z |
arrow_up |
arrow_down |
arrow_left |
arrow_right |
enter |
space |
backspace |
tab |
l_shift |
r_shift |
l_ctrl |
r_ctrl |
l_alt |
r_alt.
-type position() :: {position, float(), float()}.
-type context(DRA) :: {context,
fun((fluo@render:renderer(), fluo@mesh:mesh(), DRA) -> nil),
float(),
list(key()),
position(),
position(),
integer(),
integer(),
fluo@image:color_image(),
fluo@image:depth_image(),
binary()}.
-file("src/fluo/window.gleam", 71).
-spec window_should_close(window()) -> boolean().
window_should_close(Window) ->
fluo_nif:window_should_close(Window).
-file("src/fluo/window.gleam", 74).
-spec poll_events(window()) -> nil.
poll_events(Window) ->
fluo_nif:window_poll_events(Window).
-file("src/fluo/window.gleam", 77).
-spec keys_down(window()) -> list(key()).
keys_down(Window) ->
fluo_nif:window_keys_down(Window).
-file("src/fluo/window.gleam", 80).
-spec mouse_position(window()) -> position().
mouse_position(Window) ->
fluo_nif:window_mouse_pos(Window).
-file("src/fluo/window.gleam", 83).
-spec mouse_delta(window()) -> position().
mouse_delta(Window) ->
fluo_nif:window_mouse_delta(Window).
-file("src/fluo/window.gleam", 86).
-spec swap(window(), fluo@image:color_image()) -> nil.
swap(Window, Color) ->
fluo_nif:swap_buffers(Window, Color).
-file("src/fluo/window.gleam", 89).
-spec delta(window()) -> float().
delta(Window) ->
fluo_nif:window_delta_time(Window).
-file("src/fluo/window.gleam", 91).
-spec create_window(binary(), integer(), integer()) -> window().
create_window(Title, Width, Height) ->
Handle = fluo_nif:create_window(Title, Width, Height),
Color = fluo@image:create_color_image(Width, Height),
Depth = fluo@image:create_depth_image(Width, Height),
{window, Width, Height, Title, Color, Depth, Handle}.
-file("src/fluo/window.gleam", 103).
-spec present(window()) -> nil.
present(Window) ->
fluo_nif:swap_buffers(Window, erlang:element(5, Window)).
-file("src/fluo/window.gleam", 107).
-spec width(window()) -> integer().
width(Window) ->
erlang:element(2, Window).
-file("src/fluo/window.gleam", 111).
-spec height(window()) -> integer().
height(Window) ->
erlang:element(3, Window).
-file("src/fluo/window.gleam", 115).
-spec title(window()) -> binary().
title(Window) ->
erlang:element(4, Window).
-file("src/fluo/window.gleam", 119).
-spec color(window()) -> fluo@image:color_image().
color(Window) ->
erlang:element(5, Window).
-file("src/fluo/window.gleam", 123).
-spec depth(window()) -> fluo@image:depth_image().
depth(Window) ->
erlang:element(6, Window).
-file("src/fluo/window.gleam", 142).
-spec loop(window(), DRC, fun((context(any()), DRC) -> DRC)) -> nil.
loop(Window, State, Callback) ->
case fluo_nif:window_should_close(Window) of
true ->
nil;
false ->
fluo_nif:start_rendering(),
fluo_nif:window_poll_events(Window),
Delta = fluo_nif:window_delta_time(Window),
Keys_down = fluo_nif:window_keys_down(Window),
Mouse_pos = fluo_nif:window_mouse_pos(Window),
Mouse_delta = fluo_nif:window_mouse_delta(Window),
Draw = fun(Renderer, Mesh, Params) ->
Color = {some, erlang:element(5, Window)},
Depth = {some, erlang:element(6, Window)},
fluo_nif:draw_mesh(Renderer, Mesh, Params, Color, Depth)
end,
Ctx = {context,
Draw,
Delta,
Keys_down,
Mouse_pos,
Mouse_delta,
erlang:element(2, Window),
erlang:element(3, Window),
erlang:element(5, Window),
erlang:element(6, Window),
erlang:element(4, Window)},
State@1 = Callback(Ctx, State),
fluo_nif:end_rendering(),
present(Window),
loop(Window, State@1, Callback)
end.