Skip to content

Instantly share code, notes, and snippets.


Cameron Hart bitshifter

View GitHub Profile
bitshifter /
Created Nov 12, 2019
unit quaternion drift
use glam;
use rand::{thread_rng, Rng};
fn rand_angle<R: Rng>(rng: &mut R) -> f32 {
rng.gen_range(-std::f32::consts::PI, std::f32::consts::PI)
fn rand_quat<R: Rng>(rng: &mut R) -> glam::Quat {
let yaw = rand_angle(rng);
let pitch = rand_angle(rng);
bitshifter /
Last active Jun 4, 2019
mathbench mat4 mul comparison

mathbench Mat4 mul comparison

mathbench lib

pub fn glam_mat4_mul(lhs: glam::Mat4, rhs: glam::Mat4) -> glam::Mat4 {
    lhs * rhs

pub fn nalgebra_mat4_mul(
    lhs: nalgebra::Matrix4<f32>,
bitshifter / sleepy_fib.cpp
Created Jul 22, 2018
sampling vs instrumentation
View sleepy_fib.cpp
#include <chrono>
#include <random>
#include <iostream>
#include <thread>
int fib(int x) {
if (x == 0)
return 0;
if (x == 1)
return 1;
View gist:2fb86002961f33869b9873d5841e33a2
#[cfg(target_arch = "x86")]
use std::arch::x86::*;
#[cfg(target_arch = "x86_64")]
use std::arch::x86_64::*;
pub fn add_scalar(a: &[f32], b: &[f32], c: &mut [f32]) {
for ((a, b), c) in a.iter().zip(b.iter()).zip(c.iter_mut()) {
bitshifter /
Created Apr 14, 2018
Minimal reproduction of rustc ICE issue #48638
use std::any::Any;
use std::fmt::Debug;
use std::marker::PhantomData;
// use std::ops::Mul;
pub trait Scalar: Copy + PartialEq + Debug + Any {}
impl Scalar for f64 {}
pub trait Dim: Any + Debug + Copy + PartialEq + Send {}
bitshifter / issue96.patch
Created Jan 1, 2018
Test case for issue 96, replicating cgmath AsMut ambiguity.
View issue96.patch
diff --git a/imgui-examples/examples/ b/imgui-examples/examples/
index c9cc5c8..e5ec03a 100644
--- a/imgui-examples/examples/
+++ b/imgui-examples/examples/
@@ -4,9 +4,34 @@ extern crate imgui;
extern crate imgui_glium_renderer;
use imgui::*;
+use std::mem;
View gist:71f0c5f3146db43a223ce08cdd0247c2
# bench_f32 loop:
vmovss (%rdi), %xmm1
vmovsd 4(%rdi), %xmm2
vmulss 12(%rdi), %xmm1, %xmm1
vmovsd 16(%rdi), %xmm3
vmulps %xmm3, %xmm2, %xmm2
vaddss %xmm2, %xmm1, %xmm1
vmovshdup %xmm2, %xmm2
vaddss %xmm2, %xmm1, %xmm1
View task_fence.hpp
#include <condition_variable>
#include <mutex>
class TaskFence
int taskCount_;
std::condition_variable taskCV_;
View SerializedTaskArena.h
#include "tbb/tbb.h"
#include "tbb/concurrent_queue.h"
#include "tbb/task_arena.h"
// Based on LocalSerializer pattern which enforces execution order based on submission order
class SerializedTaskArena
View Shit Pong
extern crate sdl2;
use sdl2::pixels::Color;
use sdl2::event::Event;
use sdl2::keyboard::Keycode;
use sdl2::rect::Rect;
const BORDER: i32 = 32;
const WIDTH: i32 = 1024;
const HEIGHT: i32 = 768;
You can’t perform that action at this time.