thallium 0.1.9

A 2d and 3d game engine
Documentation

thallium

Latest Version Rust Documentation GitHub license

This is a 2d and 3d game engine. It is still very early in development so expect changes in the api.

Currently it only supports OpenGL 3.3+

Example code

How to render a red traingle

use thallium::{math::*, platform::*, renderer::*, scene::*, *};

fn main() {
    let mut renderer = Surface::new((640, 480).into(), "Test").into_renderer(RendererAPI::OpenGL);

    let shader = renderer.create_shader(
        r"#version 330 core

in vec4 a_Position;

void main() {
    gl_Position = a_Position;
}
",
        r"#version 330 core

out vec4 o_Color;

void main() {
    o_Color = vec4(1.0, 0.0, 0.0, 1.0);
}
",
    ).unwrap();

    #[repr(C, packed)]
    struct Vertex {
        position: Vector2<f32>,
    }
    let vertices: &[Vertex] = &[
        Vertex {
            position: (0.0, 0.5).into(),
        },
        Vertex {
            position: (0.5, -0.5).into(),
        },
        Vertex {
            position: (-0.5, -0.5).into(),
        },
    ];
    let vertex_buffer = renderer.create_vertex_buffer(
        &[VertexBufferElement::Float2],
        slice_to_bytes(vertices),
    );

    renderer.get_surface_mut().show();
    'main_loop: loop {
        for event in renderer.get_surface_mut().events() {
            match event {
                SurfaceEvent::Close => break 'main_loop,
                SurfaceEvent::Resize(size) => renderer.resize(size),
                _ => {}
            }
        }

        renderer.clear((0.2, 0.4, 0.8).into());
        {
            let mut draw_context = renderer.drawing_context(Camera::default(), false, CullFace::Clockwise);
            draw_context.draw(PrimitiveType::Triangle, shader, vertex_buffer, None, Matrix4x4::default(), Vector3::zero());
        }
        renderer.present();
    }
    renderer.get_surface_mut().hide();
}