Skip to content

Instantly share code, notes, and snippets.

View matthewjberger's full-sized avatar
🦀
Writing something in Rust, probably

Matthew J. Berger matthewjberger

🦀
Writing something in Rust, probably
  • Hyphen
View GitHub Profile
@matthewjberger
matthewjberger / Cargo.toml
Last active April 23, 2024 20:32
Rust window - winit 0.29.11, wgpu 0.19.1, egui 0.27.2
[package]
name = "app"
version = "0.1.0"
edition = "2021"
[dependencies]
egui = "0.27.2"
egui-wgpu = { version = "0.27.2", features = ["winit"] }
egui-winit = "0.27.2"
pollster = "0.3.0"
@matthewjberger
matthewjberger / instructions.md
Created February 12, 2024 01:11
Create an orphan gh-pages branch in git
git checkout --orphan gh-pages
git reset --hard
git commit --allow-empty -m "Initializing gh-pages branch"
git push origin gh-pages
git checkout main
@matthewjberger
matthewjberger / main.rs
Last active February 10, 2024 18:09
Create a window in rust (winit 0.29+ anyhow + env_logger)
// [dependencies]
// anyhow = "1.0.40"
// env_logger = "0.11.1"
// winit = "0.29.10"
fn main() -> anyhow::Result<()> {
env_logger::init();
let event_loop = winit::event_loop::EventLoop::new()?;
let _window = winit::window::WindowBuilder::new()
@matthewjberger
matthewjberger / main.rs
Created February 10, 2024 17:42
Rust window (winit 0.28.7 + anyhow + env_logger)
// [dependencies]
// anyhow = "1.0.40"
// env_logger = "0.11.1"
// winit = "0.28.7"
use anyhow::Result;
fn main() -> Result<()> {
env_logger::init();
@matthewjberger
matthewjberger / fft.rs
Created February 6, 2024 03:11
Fast fourier transform demonstration in rust
use std::f32::consts::PI;
// Complex number struct
#[derive(Clone, Copy)]
struct Complex {
re: f32,
im: f32,
}
// Implementing basic operations for Complex numbers
@matthewjberger
matthewjberger / heart.rs
Created January 20, 2024 22:03
A little heart shader
// cosine based palette, 4 vec3 params
vec3 palette( in float t )
{
vec3 a = vec3(0.5, 0.1, 0.1);
vec3 b = vec3(0.7, 0.4, 0.4);
vec3 c = vec3(1.0, 0.8, 0.8);
vec3 d = vec3(0.263, 0.416, 0.557);
return a + b*cos( 6.28318*(c*t+d) );
}
@matthewjberger
matthewjberger / decompose.rs
Created January 7, 2024 08:11
Decompose a nalgebra_glm 4x4 transformation matrix into translation, rotation, and scaling (accounts for non-uniform scaling)
pub fn decompose_matrix(
matrix: &nalgebra_glm::Mat4,
) -> (nalgebra_glm::Vec3, nalgebra_glm::Quat, nalgebra_glm::Vec3) {
let translation = nalgebra_glm::Vec3::new(matrix.m14, matrix.m24, matrix.m34);
let (scale_x, scale_y, scale_z) = (
nalgebra_glm::length(&nalgebra_glm::Vec3::new(matrix.m11, matrix.m12, matrix.m13)),
nalgebra_glm::length(&nalgebra_glm::Vec3::new(matrix.m21, matrix.m22, matrix.m23)),
nalgebra_glm::length(&nalgebra_glm::Vec3::new(matrix.m31, matrix.m32, matrix.m33)),
);
@matthewjberger
matthewjberger / walk.rs
Last active January 7, 2024 04:01
Recursively walk a petgraph directed graph
fn visit_graph_recursively<N, E, VM>(
graph: &petgraph::graph::DiGraph<N, E>,
visit_map: &mut VM,
node_idx: petgraph::graph::NodeIndex,
) where
N: std::fmt::Debug,
VM: petgraph::visit::VisitMap<petgraph::graph::NodeIndex>,
{
// Mark the current node as visited
visit_map.visit(node_idx);
@matthewjberger
matthewjberger / tinycommand.rs
Created January 6, 2024 23:55
A tiny command pattern in rust
#[derive(Default, Debug, Clone, serde::Serialize, serde::Deserialize)]
pub enum Command {
#[default]
Empty,
Exit,
}
impl Command {
pub fn execute(&mut self, context: &mut Context) {
@matthewjberger
matthewjberger / tinytimestep.rs
Last active January 6, 2024 23:55
Fixed timestep example
use std::time::{Instant};
#[derive(Clone)] // Derive the Clone trait to enable cloning of State
struct State {
// Example fields representing the state of the physics object
position: f64,
velocity: f64,
}
// Function to update the physics state of the object