tetra 0.6.5

A simple 2D game framework written in Rust
Documentation
use tetra::graphics::mesh::{BorderRadii, GeometryBuilder, Mesh, ShapeStyle};
use tetra::graphics::{self, Color, Rectangle, Shader};
use tetra::math::Vec2;
use tetra::{Context, ContextBuilder, State};

struct GameState {
    mesh: Mesh,
}

impl GameState {
    fn new(ctx: &mut Context) -> tetra::Result<GameState> {
        let mesh = GeometryBuilder::new()
            .rounded_rectangle(
                ShapeStyle::Stroke(2.0),
                Rectangle::new(0.0, 0.0, 16.0, 16.0),
                BorderRadii::new(4.0),
            )?
            .build_mesh(ctx)?;

        let mut offsets = Vec::with_capacity(256);

        for y in 0..16 {
            for x in 0..16 {
                offsets.push(Vec2::new(x as f32 * 32.0, y as f32 * 32.0));
            }
        }

        let shader = Shader::from_vertex_file(ctx, "./examples/resources/instanced.vert")?;
        shader.set_uniform(ctx, "u_offsets", offsets.as_slice());

        graphics::set_shader(ctx, &shader);

        Ok(GameState { mesh })
    }
}

impl State for GameState {
    fn draw(&mut self, ctx: &mut Context) -> tetra::Result {
        graphics::clear(ctx, Color::rgb(0.094, 0.11, 0.16));

        self.mesh.draw_instanced(ctx, 256, Vec2::new(16.0, 16.0));

        Ok(())
    }
}

fn main() -> tetra::Result {
    ContextBuilder::new("Instanced Mesh Rendering", 1280, 720)
        .build()?
        .run(GameState::new)
}