Fluo

Simplicity is the highest sophistication ~ chopin

Simple and elegant vulkan renderer for Gleam ⭐, a purely functional programming language. Currently under development.

Gleam cpu code

import fluo/color.{red}
import fluo/render
import fluo/mesh
import fluo/window

pub fn main() {
  let window = window.create_window("Fluo Window", width: 800, height: 600)

  let triangle = mesh.load_mesh("triangle.obj")

  let renderer = render.create_renderer(vert: "vert.spv", frag: "frag.spv")

  use ctx, alpha <- window.loop(window, 0.0)

  ctx.draw(renderer, triangle, #(red.r, red.g, red.b, alpha))

  let alpha = case ctx.keys_down {
    [window.Space] -> alpha +. ctx.delta
    _ -> alpha
  }

  alpha
}

Vertex gpu shader

#version 450

#define VERTEX_SHADER
#include "fluo.glsl"

layout(location = 0) out vec2 frag_uv;

void main() {
    gl_Position = model * vec4(in_position, 1.0);

    frag_uv = in_uv;
}

Fragment gpu shader

#version 450

#include "fluo.glsl"

layout(location = 0) out vec4 out_color;

DEF_MATERIAL({
    vec4 color;
});

void main() {
    out_color = vec4(MATERIAL.color.xyz * MATERIAL.color.w, 1.0);
}

Checkout more examples in the examples folder.

Search Document