Skip to content

Instantly share code, notes, and snippets.

package import_scan
import "core:strings"
import "core:strconv"
import "core:path/filepath"
import "core:fmt"
import "core:os/os2"
import "core:odin/ast"
import "core:odin/parser"
import "core:odin/tokenizer"
@jakubtomsu
jakubtomsu / fast_negative_exp.odin
Last active January 27, 2026 20:57
~11x faster exp(-x)
package foo
import "base:intrinsics"
import "core:math"
import "core:fmt"
import "core:time"
// https://www.desmos.com/calculator/i17pexccum
a: f32 = 1.0
@jakubtomsu
jakubtomsu / ufmt.odin
Created January 19, 2026 13:57
Extremely stripped down lightweight `core:fmt` alternative
// Micro-fmt
//
// Extremely stripped down `core:fmt` alternative.
// Supports only %s, %f, %i, %x, %%
// NOTE: curly braces don't need to be doubled ({{ and }}) like in `core:fmt`
//
// By Jakub Tomšů
package ufmt
import "base:runtime"
@jakubtomsu
jakubtomsu / poly_obb.odin
Created August 2, 2025 13:54
A demo app showing how to compute tightest possible oriented bounding box of a 2D polygon
// A demo app showing how to compute tightest possible oriented bounding box/rectangle of a convex polygon.
// The order of edges matters, so the points should be in order. In case of convex polygons you can just radially sort them.
//
// By Jakub Tomšů
package poly_obb_demo
import "core:fmt"
import "core:math/linalg"
import rl "vendor:raylib"
package fp_exceptions
import "core:log"
when ODIN_OS == .Windows {
foreign import libcmt "system:libcmt.lib"
}
@(default_calling_convention = "system")
foreign libcmt {
// Failed experiment for a hotreload system. Instead of passing a big global struct pointer, try copying DLL global data sections.
copy_dll_data_sections :: proc(
dst: windows.HMODULE,
src: windows.HMODULE,
) -> bool {
dst_header := get_dll_nt_header(dst) or_return
src_header := get_dll_nt_header(src) or_return
dst_sections := cast([^]windows_IMAGE_SECTION_HEADER)windows_image_first_section(dst_header)
@jakubtomsu
jakubtomsu / obj.odin
Created October 6, 2024 09:34
Simple .obj 3d model parser, doesn't support 100% features like curves and whatnot but it's good enough for most regular models.
package obj
import "core:fmt"
import "core:math/linalg"
import "core:os"
import "core:strconv"
import "core:strings"
// https://en.wikipedia.org/wiki/Wavefront_.obj_file
@jakubtomsu
jakubtomsu / qmap.odin
Created October 6, 2024 09:33
Very simple parser for quake .map readable level data format (Valve version). I didn't fully test it.
package qmap
import "core:fmt"
import "core:os"
import "core:strconv"
import "core:strings"
// https://developer.valvesoftware.com/wiki/MAP_(file_format)
File :: struct {
@jakubtomsu
jakubtomsu / curves.odin
Created September 14, 2024 17:00
Curves based on Freya's video
package curves
Curve_Kind :: enum u8 {
Linear,
Bezier,
Hermite,
Catmull_Rom,
B_Spline,
}
@jakubtomsu
jakubtomsu / points_along_curve.odin
Created September 14, 2024 16:11
Simple example of nicely animating moving points along a curve
package curve_test
import "core:math/linalg"
import rl "vendor:raylib"
main :: proc() {
rl.SetConfigFlags({.MSAA_4X_HINT, .VSYNC_HINT})
rl.InitWindow(900, 600, "Curves")
defer rl.CloseWindow()