`GLSL`-like mathematics library plus numerous other utility procedures.

Collection Info

View Source
Collection
core
Path
math/linalg/glsl
Entries
712

Source Files

Constants

13

SQRT_FIVE #

Source
SQRT_FIVE :: 2.23606797749978969640917366873127623

SQRT_THREE #

Source
SQRT_THREE :: 1.73205080756887729352744634150587236

Types

41

mat2 #

Source
mat2 :: matrix[2, 2]f32

Odin matrices are stored internally as Column-Major, which matches OpenGL/GLSL by default

mat3x2 #

Source
mat3x2 :: matrix[2, 3]f32

IMPORTANT NOTE: These data types are "backwards" in normal mathematical terms but they match how GLSL and OpenGL defines them in name Odin: matrix[R, C]f32 GLSL: matCxR

Procedures

594

adjugate_matrix1x1 #

Source
@(require_results)
adjugate_matrix1x1 :: proc "contextless" (x: $M/matrix[1, 1]$T) -> (y: $$deferred_return) {…}

adjugate_matrix2x2 #

Source
@(require_results)
adjugate_matrix2x2 :: proc "contextless" (x: $M/matrix[2, 2]$T) -> (y: $$deferred_return) {…}

adjugate_matrix3x3 #

Source
@(require_results)
adjugate_matrix3x3 :: proc "contextless" (m: $M/matrix[3, 3]$T) -> (y: $$deferred_return) {…}

adjugate_matrix4x4 #

Source
@(require_results)
adjugate_matrix4x4 :: proc "contextless" (x: $M/matrix[4, 4]$T) -> (y: $$deferred_return) {…}

cofactor_matrix1x1 #

Source
@(require_results)
cofactor_matrix1x1 :: proc "contextless" (x: $M/matrix[1, 1]$T) -> (y: $$deferred_return) {…}

cofactor_matrix2x2 #

Source
@(require_results)
cofactor_matrix2x2 :: proc "contextless" (x: $M/matrix[2, 2]$T) -> (y: $$deferred_return) {…}

cofactor_matrix3x3 #

Source
@(require_results)
cofactor_matrix3x3 :: proc "contextless" (m: $M/matrix[3, 3]$T) -> (y: $$deferred_return) {…}

cofactor_matrix4x4 #

Source
@(require_results)
cofactor_matrix4x4 :: proc "contextless" (x: $M/matrix[4, 4]$T) -> (y: $$deferred_return) {…}

cross_dvec3 #

Source
@(require_results)
cross_dvec3 :: proc "c" (a, b: [3]f64) -> (c: [3]f64) {…}

cross_ivec3 #

Source
@(require_results)
cross_ivec3 :: proc "c" (a, b: [3]i32) -> (c: [3]i32) {…}

degrees_dvec2 #

Source
@(require_results)
degrees_dvec2 :: proc "c" (radians: [2]f64) -> [2]f64 {…}

degrees_dvec3 #

Source
@(require_results)
degrees_dvec3 :: proc "c" (radians: [3]f64) -> [3]f64 {…}

degrees_dvec4 #

Source
@(require_results)
degrees_dvec4 :: proc "c" (radians: [4]f64) -> [4]f64 {…}

degrees_vec2 #

Source
@(require_results)
degrees_vec2 :: proc "c" (radians: [2]f32) -> [2]f32 {…}

degrees_vec3 #

Source
@(require_results)
degrees_vec3 :: proc "c" (radians: [3]f32) -> [3]f32 {…}

degrees_vec4 #

Source
@(require_results)
degrees_vec4 :: proc "c" (radians: [4]f32) -> [4]f32 {…}

determinant_matrix1x1 #

Source
@(require_results)
determinant_matrix1x1 :: proc "contextless" (m: $M/matrix[1, 1]$T) -> (det: $$deferred_return) {…}

determinant_matrix2x2 #

Source
@(require_results)
determinant_matrix2x2 :: proc "contextless" (m: $M/matrix[2, 2]$T) -> (det: $$deferred_return) {…}

determinant_matrix3x3 #

Source
@(require_results)
determinant_matrix3x3 :: proc "contextless" (m: $M/matrix[3, 3]$T) -> (det: $$deferred_return) {…}

determinant_matrix4x4 #

Source
@(require_results)
determinant_matrix4x4 :: proc "contextless" (m: $M/matrix[4, 4]$T) -> (det: $$deferred_return) {…}

dmat4LookAt #

Source
@(require_results)
dmat4LookAt :: proc "c" (eye, centre: [3]f64, up: [3]f64) -> (m: matrix[4, 4]f64) {…}

dmat4Orientation #

Source
@(require_results)
dmat4Orientation :: proc "c" (normal, up: [3]f64) -> matrix[4, 4]f64 {…}

dmat4Ortho3d #

Source
@(require_results)
dmat4Ortho3d :: proc "c" (
	left, right, bottom, top, near, far: f64, 
) -> (m: matrix[4, 4]f64) {…}

dmat4Perspective #

Source
@(require_results)
dmat4Perspective :: proc "c" (fovy, aspect, near, far: f64) -> (m: matrix[4, 4]f64) {…}

dmat4PerspectiveInfinite #

Source
@(require_results)
dmat4PerspectiveInfinite :: proc "c" (fovy, aspect, near: f64) -> (m: matrix[4, 4]f64) {…}

dmat4Rotate #

Source
@(require_results)
dmat4Rotate :: proc "c" (v: [3]f64, radians: f64) -> (rot: matrix[4, 4]f64) {…}

dmat4Scale #

Source
@(require_results)
dmat4Scale :: proc "c" (v: [3]f64) -> (m: matrix[4, 4]f64) {…}

dmat4Translate #

Source
@(require_results)
dmat4Translate :: proc "c" (v: [3]f64) -> (m: matrix[4, 4]f64) {…}

faceForward_dvec2 #

Source
@(require_results)
faceForward_dvec2 :: proc "c" (N, I, Nref: [2]f64) -> [2]f64 {…}

faceForward_dvec3 #

Source
@(require_results)
faceForward_dvec3 :: proc "c" (N, I, Nref: [3]f64) -> [3]f64 {…}

faceForward_dvec4 #

Source
@(require_results)
faceForward_dvec4 :: proc "c" (N, I, Nref: [4]f64) -> [4]f64 {…}

faceForward_f32 #

Source
@(require_results)
faceForward_f32 :: proc "c" (N, I, Nref: f32) -> f32 {…}

faceForward_f64 #

Source
@(require_results)
faceForward_f64 :: proc "c" (N, I, Nref: f64) -> f64 {…}

faceForward_vec2 #

Source
@(require_results)
faceForward_vec2 :: proc "c" (N, I, Nref: [2]f32) -> [2]f32 {…}

faceForward_vec3 #

Source
@(require_results)
faceForward_vec3 :: proc "c" (N, I, Nref: [3]f32) -> [3]f32 {…}

faceForward_vec4 #

Source
@(require_results)
faceForward_vec4 :: proc "c" (N, I, Nref: [4]f32) -> [4]f32 {…}

greaterThan_dvec2 #

Source
@(require_results)
greaterThan_dvec2 :: proc "c" (a, b: [2]f64) -> [2]bool {…}

greaterThan_dvec3 #

Source
@(require_results)
greaterThan_dvec3 :: proc "c" (a, b: [3]f64) -> [3]bool {…}

greaterThan_dvec4 #

Source
@(require_results)
greaterThan_dvec4 :: proc "c" (a, b: [4]f64) -> [4]bool {…}

greaterThan_ivec2 #

Source
@(require_results)
greaterThan_ivec2 :: proc "c" (a, b: [2]i32) -> [2]bool {…}

greaterThan_ivec3 #

Source
@(require_results)
greaterThan_ivec3 :: proc "c" (a, b: [3]i32) -> [3]bool {…}

greaterThan_ivec4 #

Source
@(require_results)
greaterThan_ivec4 :: proc "c" (a, b: [4]i32) -> [4]bool {…}

greaterThan_uvec2 #

Source
@(require_results)
greaterThan_uvec2 :: proc "c" (a, b: [2]u32) -> [2]bool {…}

greaterThan_uvec3 #

Source
@(require_results)
greaterThan_uvec3 :: proc "c" (a, b: [3]u32) -> [3]bool {…}

greaterThan_uvec4 #

Source
@(require_results)
greaterThan_uvec4 :: proc "c" (a, b: [4]u32) -> [4]bool {…}

greaterThan_vec2 #

Source
@(require_results)
greaterThan_vec2 :: proc "c" (a, b: [2]f32) -> [2]bool {…}

greaterThan_vec3 #

Source
@(require_results)
greaterThan_vec3 :: proc "c" (a, b: [3]f32) -> [3]bool {…}

greaterThan_vec4 #

Source
@(require_results)
greaterThan_vec4 :: proc "c" (a, b: [4]f32) -> [4]bool {…}

greaterThanEqual_dvec2 #

Source
@(require_results)
greaterThanEqual_dvec2 :: proc "c" (a, b: [2]f64) -> [2]bool {…}

greaterThanEqual_dvec3 #

Source
@(require_results)
greaterThanEqual_dvec3 :: proc "c" (a, b: [3]f64) -> [3]bool {…}

greaterThanEqual_dvec4 #

Source
@(require_results)
greaterThanEqual_dvec4 :: proc "c" (a, b: [4]f64) -> [4]bool {…}

greaterThanEqual_f32 #

Source
@(require_results)
greaterThanEqual_f32 :: proc "c" (a, b: f32) -> bool {…}

greaterThanEqual_f64 #

Source
@(require_results)
greaterThanEqual_f64 :: proc "c" (a, b: f64) -> bool {…}

greaterThanEqual_i32 #

Source
@(require_results)
greaterThanEqual_i32 :: proc "c" (a, b: i32) -> bool {…}

greaterThanEqual_ivec2 #

Source
@(require_results)
greaterThanEqual_ivec2 :: proc "c" (a, b: [2]i32) -> [2]bool {…}

greaterThanEqual_ivec3 #

Source
@(require_results)
greaterThanEqual_ivec3 :: proc "c" (a, b: [3]i32) -> [3]bool {…}

greaterThanEqual_ivec4 #

Source
@(require_results)
greaterThanEqual_ivec4 :: proc "c" (a, b: [4]i32) -> [4]bool {…}

greaterThanEqual_u32 #

Source
@(require_results)
greaterThanEqual_u32 :: proc "c" (a, b: u32) -> bool {…}

greaterThanEqual_uvec2 #

Source
@(require_results)
greaterThanEqual_uvec2 :: proc "c" (a, b: [2]u32) -> [2]bool {…}

greaterThanEqual_uvec3 #

Source
@(require_results)
greaterThanEqual_uvec3 :: proc "c" (a, b: [3]u32) -> [3]bool {…}

greaterThanEqual_uvec4 #

Source
@(require_results)
greaterThanEqual_uvec4 :: proc "c" (a, b: [4]u32) -> [4]bool {…}

greaterThanEqual_vec2 #

Source
@(require_results)
greaterThanEqual_vec2 :: proc "c" (a, b: [2]f32) -> [2]bool {…}

greaterThanEqual_vec3 #

Source
@(require_results)
greaterThanEqual_vec3 :: proc "c" (a, b: [3]f32) -> [3]bool {…}

greaterThanEqual_vec4 #

Source
@(require_results)
greaterThanEqual_vec4 :: proc "c" (a, b: [4]f32) -> [4]bool {…}

hermitian_adjoint #

Source
@(require_results)
hermitian_adjoint :: proc "contextless" (m: $M/matrix[0, 0]$T) -> $$deferred_return {…}

identity #

Source
@(require_results)
identity :: proc "c" ($M: typeid/matrix[0, 0]$T) -> $$deferred_return {…}

inverse_dmat2 #

Source
@(require_results)
inverse_dmat2 :: proc "c" (m: matrix[2, 2]f64) -> matrix[2, 2]f64 {…}

inverse_dmat3 #

Source
@(require_results)
inverse_dmat3 :: proc "c" (m: matrix[3, 3]f64) -> matrix[3, 3]f64 {…}

inverse_dmat4 #

Source
@(require_results)
inverse_dmat4 :: proc "c" (m: matrix[4, 4]f64) -> matrix[4, 4]f64 {…}

inverse_mat2 #

Source
@(require_results)
inverse_mat2 :: proc "c" (m: matrix[2, 2]f32) -> matrix[2, 2]f32 {…}

inverse_mat3 #

Source
@(require_results)
inverse_mat3 :: proc "c" (m: matrix[3, 3]f32) -> matrix[3, 3]f32 {…}

inverse_mat4 #

Source
@(require_results)
inverse_mat4 :: proc "c" (m: matrix[4, 4]f32) -> matrix[4, 4]f32 {…}

inverse_matrix1x1 #

Source
@(require_results)
inverse_matrix1x1 :: proc "contextless" (x: $M/matrix[1, 1]$T) -> (y: $$deferred_return) {…}

inverse_matrix2x2 #

Source
@(require_results)
inverse_matrix2x2 :: proc "contextless" (x: $M/matrix[2, 2]$T) -> (y: $$deferred_return) {…}

inverse_matrix3x3 #

Source
@(require_results)
inverse_matrix3x3 :: proc "contextless" (x: $M/matrix[3, 3]$T) -> (y: $$deferred_return) {…}

inverse_matrix4x4 #

Source
@(require_results)
inverse_matrix4x4 :: proc "contextless" (x: $M/matrix[4, 4]$T) -> (y: $$deferred_return) {…}

inverse_transpose_matrix1x1 #

Source
@(require_results)
inverse_transpose_matrix1x1 :: proc "contextless" (x: $M/matrix[1, 1]$T) -> (y: $$deferred_return) {…}

inverse_transpose_matrix2x2 #

Source
@(require_results)
inverse_transpose_matrix2x2 :: proc "contextless" (x: $M/matrix[2, 2]$T) -> (y: $$deferred_return) {…}

inverse_transpose_matrix3x3 #

Source
@(require_results)
inverse_transpose_matrix3x3 :: proc "contextless" (x: $M/matrix[3, 3]$T) -> (y: $$deferred_return) {…}

inverse_transpose_matrix4x4 #

Source
@(require_results)
inverse_transpose_matrix4x4 :: proc "contextless" (x: $M/matrix[4, 4]$T) -> (y: $$deferred_return) {…}

inversesqrt_dvec2 #

Source
@(require_results)
inversesqrt_dvec2 :: proc "c" (x: [2]f64) -> [2]f64 {…}

inversesqrt_dvec3 #

Source
@(require_results)
inversesqrt_dvec3 :: proc "c" (x: [3]f64) -> [3]f64 {…}

inversesqrt_dvec4 #

Source
@(require_results)
inversesqrt_dvec4 :: proc "c" (x: [4]f64) -> [4]f64 {…}

inversesqrt_vec2 #

Source
@(require_results)
inversesqrt_vec2 :: proc "c" (x: [2]f32) -> [2]f32 {…}

inversesqrt_vec3 #

Source
@(require_results)
inversesqrt_vec3 :: proc "c" (x: [3]f32) -> [3]f32 {…}

inversesqrt_vec4 #

Source
@(require_results)
inversesqrt_vec4 :: proc "c" (x: [4]f32) -> [4]f32 {…}

lessThanEqual_dvec2 #

Source
@(require_results)
lessThanEqual_dvec2 :: proc "c" (a, b: [2]f64) -> [2]bool {…}

lessThanEqual_dvec3 #

Source
@(require_results)
lessThanEqual_dvec3 :: proc "c" (a, b: [3]f64) -> [3]bool {…}

lessThanEqual_dvec4 #

Source
@(require_results)
lessThanEqual_dvec4 :: proc "c" (a, b: [4]f64) -> [4]bool {…}

lessThanEqual_ivec2 #

Source
@(require_results)
lessThanEqual_ivec2 :: proc "c" (a, b: [2]i32) -> [2]bool {…}

lessThanEqual_ivec3 #

Source
@(require_results)
lessThanEqual_ivec3 :: proc "c" (a, b: [3]i32) -> [3]bool {…}

lessThanEqual_ivec4 #

Source
@(require_results)
lessThanEqual_ivec4 :: proc "c" (a, b: [4]i32) -> [4]bool {…}

lessThanEqual_uvec2 #

Source
@(require_results)
lessThanEqual_uvec2 :: proc "c" (a, b: [2]u32) -> [2]bool {…}

lessThanEqual_uvec3 #

Source
@(require_results)
lessThanEqual_uvec3 :: proc "c" (a, b: [3]u32) -> [3]bool {…}

lessThanEqual_uvec4 #

Source
@(require_results)
lessThanEqual_uvec4 :: proc "c" (a, b: [4]u32) -> [4]bool {…}

lessThanEqual_vec2 #

Source
@(require_results)
lessThanEqual_vec2 :: proc "c" (a, b: [2]f32) -> [2]bool {…}

lessThanEqual_vec3 #

Source
@(require_results)
lessThanEqual_vec3 :: proc "c" (a, b: [3]f32) -> [3]bool {…}

lessThanEqual_vec4 #

Source
@(require_results)
lessThanEqual_vec4 :: proc "c" (a, b: [4]f32) -> [4]bool {…}

mat4LookAt #

Source
@(require_results)
mat4LookAt :: proc "c" (eye, centre: [3]f32, up: [3]f32) -> (m: matrix[4, 4]f32) {…}

mat4Orientation #

Source
@(require_results)
mat4Orientation :: proc "c" (normal, up: [3]f32) -> matrix[4, 4]f32 {…}

mat4Ortho3d #

Source
@(require_results)
mat4Ortho3d :: proc "c" (
	left, right, bottom, top, near, far: f32, 
) -> (m: matrix[4, 4]f32) {…}

mat4Perspective #

Source
@(require_results)
mat4Perspective :: proc "c" (fovy, aspect, near, far: f32) -> (m: matrix[4, 4]f32) {…}

mat4PerspectiveInfinite #

Source
@(require_results)
mat4PerspectiveInfinite :: proc "c" (fovy, aspect, near: f32) -> (m: matrix[4, 4]f32) {…}

mat4Rotate #

Source
@(require_results)
mat4Rotate :: proc "c" (v: [3]f32, radians: f32) -> (rot: matrix[4, 4]f32) {…}

mat4Scale #

Source
@(require_results)
mat4Scale :: proc "c" (v: [3]f32) -> (m: matrix[4, 4]f32) {…}

mat4Translate #

Source
@(require_results)
mat4Translate :: proc "c" (v: [3]f32) -> (m: matrix[4, 4]f32) {…}

matrix_minor #

Source
@(require_results)
matrix_minor :: proc "contextless" (m: $M/matrix[0, 0]$T, #any_int row, #any_int column: int) -> (minor: $$deferred_return) {…}

normalize_dvec2 #

Source
@(require_results)
normalize_dvec2 :: proc "c" (x: [2]f64) -> [2]f64 {…}

normalize_dvec3 #

Source
@(require_results)
normalize_dvec3 :: proc "c" (x: [3]f64) -> [3]f64 {…}

normalize_dvec4 #

Source
@(require_results)
normalize_dvec4 :: proc "c" (x: [4]f64) -> [4]f64 {…}

radians_dvec2 #

Source
@(require_results)
radians_dvec2 :: proc "c" (degrees: [2]f64) -> [2]f64 {…}

radians_dvec3 #

Source
@(require_results)
radians_dvec3 :: proc "c" (degrees: [3]f64) -> [3]f64 {…}

radians_dvec4 #

Source
@(require_results)
radians_dvec4 :: proc "c" (degrees: [4]f64) -> [4]f64 {…}

radians_vec2 #

Source
@(require_results)
radians_vec2 :: proc "c" (degrees: [2]f32) -> [2]f32 {…}

radians_vec3 #

Source
@(require_results)
radians_vec3 :: proc "c" (degrees: [3]f32) -> [3]f32 {…}

radians_vec4 #

Source
@(require_results)
radians_vec4 :: proc "c" (degrees: [4]f32) -> [4]f32 {…}

refract_dvec2 #

Source
@(require_results)
refract_dvec2 :: proc "c" (i, n, eta: [2]f64) -> [2]f64 {…}

refract_dvec3 #

Source
@(require_results)
refract_dvec3 :: proc "c" (i, n, eta: [3]f64) -> [3]f64 {…}

refract_dvec4 #

Source
@(require_results)
refract_dvec4 :: proc "c" (i, n, eta: [4]f64) -> [4]f64 {…}

refract_vec2 #

Source
@(require_results)
refract_vec2 :: proc "c" (i, n, eta: [2]f32) -> [2]f32 {…}

refract_vec3 #

Source
@(require_results)
refract_vec3 :: proc "c" (i, n, eta: [3]f32) -> [3]f32 {…}

refract_vec4 #

Source
@(require_results)
refract_vec4 :: proc "c" (i, n, eta: [4]f32) -> [4]f32 {…}

scalarTripleProduct_dvec3 #

Source
@(require_results)
scalarTripleProduct_dvec3 :: proc "c" (a, b, c: [3]f64) -> f64 {…}

scalarTripleProduct_ivec3 #

Source
@(require_results)
scalarTripleProduct_ivec3 :: proc "c" (a, b, c: [3]i32) -> i32 {…}

scalarTripleProduct_vec3 #

Source
@(require_results)
scalarTripleProduct_vec3 :: proc "c" (a, b, c: [3]f32) -> f32 {…}

smoothstep_dvec2 #

Source
@(require_results)
smoothstep_dvec2 :: proc "c" (edge0, edge1, x: [2]f64) -> [2]f64 {…}

smoothstep_dvec3 #

Source
@(require_results)
smoothstep_dvec3 :: proc "c" (edge0, edge1, x: [3]f64) -> [3]f64 {…}

smoothstep_dvec4 #

Source
@(require_results)
smoothstep_dvec4 :: proc "c" (edge0, edge1, x: [4]f64) -> [4]f64 {…}

smoothstep_f32 #

Source
@(require_results)
smoothstep_f32 :: proc "c" (edge0, edge1, x: f32) -> f32 {…}

smoothstep_f64 #

Source
@(require_results)
smoothstep_f64 :: proc "c" (edge0, edge1, x: f64) -> f64 {…}

smoothstep_vec2 #

Source
@(require_results)
smoothstep_vec2 :: proc "c" (edge0, edge1, x: [2]f32) -> [2]f32 {…}

smoothstep_vec3 #

Source
@(require_results)
smoothstep_vec3 :: proc "c" (edge0, edge1, x: [3]f32) -> [3]f32 {…}

smoothstep_vec4 #

Source
@(require_results)
smoothstep_vec4 :: proc "c" (edge0, edge1, x: [4]f32) -> [4]f32 {…}

trace #

Source
@(require_results)
trace :: proc "contextless" (m: $M/matrix[0, 0]$T) -> (trace: $$deferred_return) {…}

vectorTripleProduct_dvec3 #

Source
@(require_results)
vectorTripleProduct_dvec3 :: proc "c" (a, b, c: [3]f64) -> [3]f64 {…}

vectorTripleProduct_ivec3 #

Source
@(require_results)
vectorTripleProduct_ivec3 :: proc "c" (a, b, c: [3]i32) -> [3]i32 {…}

vectorTripleProduct_vec3 #

Source
@(require_results)
vectorTripleProduct_vec3 :: proc "c" (a, b, c: [3]f32) -> [3]f32 {…}

Procedure Groups

64