Files
Odin/core/math/linalg/swizzle.odin
T

223 lines
5.3 KiB
Odin

package linalg
Scalar_Components :: enum u8 {
x = 0,
r = 0,
}
Vector2_Components :: enum u8 {
x = 0,
y = 1,
r = 0,
g = 1,
}
Vector3_Components :: enum u8 {
x = 0,
y = 1,
z = 2,
r = 0,
g = 1,
b = 2,
}
Vector4_Components :: enum u8 {
x = 0,
y = 1,
z = 2,
w = 3,
r = 0,
g = 1,
b = 2,
a = 3,
}
scalar_f32_swizzle1 :: proc(f: f32, c0: Scalar_Components) -> f32 {
return f;
}
scalar_f32_swizzle2 :: proc(f: f32, c0, c1: Scalar_Components) -> Vector2f32 {
return {f, f};
}
scalar_f32_swizzle3 :: proc(f: f32, c0, c1, c2: Scalar_Components) -> Vector3f32 {
return {f, f, f};
}
scalar_f32_swizzle4 :: proc(f: f32, c0, c1, c2, c3: Scalar_Components) -> Vector4f32 {
return {f, f, f, f};
}
vector2f32_swizzle1 :: proc(v: Vector2f32, c0: Vector2_Components) -> f32 {
return v[c0];
}
vector2f32_swizzle2 :: proc(v: Vector2f32, c0, c1: Vector2_Components) -> Vector2f32 {
return {v[c0], v[c1]};
}
vector2f32_swizzle3 :: proc(v: Vector2f32, c0, c1, c2: Vector2_Components) -> Vector3f32 {
return {v[c0], v[c1], v[c2]};
}
vector2f32_swizzle4 :: proc(v: Vector2f32, c0, c1, c2, c3: Vector2_Components) -> Vector4f32 {
return {v[c0], v[c1], v[c2], v[c3]};
}
vector3f32_swizzle1 :: proc(v: Vector3f32, c0: Vector3_Components) -> f32 {
return v[c0];
}
vector3f32_swizzle2 :: proc(v: Vector3f32, c0, c1: Vector3_Components) -> Vector2f32 {
return {v[c0], v[c1]};
}
vector3f32_swizzle3 :: proc(v: Vector3f32, c0, c1, c2: Vector3_Components) -> Vector3f32 {
return {v[c0], v[c1], v[c2]};
}
vector3f32_swizzle4 :: proc(v: Vector3f32, c0, c1, c2, c3: Vector3_Components) -> Vector4f32 {
return {v[c0], v[c1], v[c2], v[c3]};
}
vector4f32_swizzle1 :: proc(v: Vector4f32, c0: Vector4_Components) -> f32 {
return v[c0];
}
vector4f32_swizzle2 :: proc(v: Vector4f32, c0, c1: Vector4_Components) -> Vector2f32 {
return {v[c0], v[c1]};
}
vector4f32_swizzle3 :: proc(v: Vector4f32, c0, c1, c2: Vector4_Components) -> Vector3f32 {
return {v[c0], v[c1], v[c2]};
}
vector4f32_swizzle4 :: proc(v: Vector4f32, c0, c1, c2, c3: Vector4_Components) -> Vector4f32 {
return {v[c0], v[c1], v[c2], v[c3]};
}
scalar_f64_swizzle1 :: proc(f: f64, c0: Scalar_Components) -> f64 {
return f;
}
scalar_f64_swizzle2 :: proc(f: f64, c0, c1: Scalar_Components) -> Vector2f64 {
return {f, f};
}
scalar_f64_swizzle3 :: proc(f: f64, c0, c1, c2: Scalar_Components) -> Vector3f64 {
return {f, f, f};
}
scalar_f64_swizzle4 :: proc(f: f64, c0, c1, c2, c3: Scalar_Components) -> Vector4f64 {
return {f, f, f, f};
}
vector2f64_swizzle1 :: proc(v: Vector2f64, c0: Vector2_Components) -> f64 {
return v[c0];
}
vector2f64_swizzle2 :: proc(v: Vector2f64, c0, c1: Vector2_Components) -> Vector2f64 {
return {v[c0], v[c1]};
}
vector2f64_swizzle3 :: proc(v: Vector2f64, c0, c1, c2: Vector2_Components) -> Vector3f64 {
return {v[c0], v[c1], v[c2]};
}
vector2f64_swizzle4 :: proc(v: Vector2f64, c0, c1, c2, c3: Vector2_Components) -> Vector4f64 {
return {v[c0], v[c1], v[c2], v[c3]};
}
vector3f64_swizzle1 :: proc(v: Vector3f64, c0: Vector3_Components) -> f64 {
return v[c0];
}
vector3f64_swizzle2 :: proc(v: Vector3f64, c0, c1: Vector3_Components) -> Vector2f64 {
return {v[c0], v[c1]};
}
vector3f64_swizzle3 :: proc(v: Vector3f64, c0, c1, c2: Vector3_Components) -> Vector3f64 {
return {v[c0], v[c1], v[c2]};
}
vector3f64_swizzle4 :: proc(v: Vector3f64, c0, c1, c2, c3: Vector3_Components) -> Vector4f64 {
return {v[c0], v[c1], v[c2], v[c3]};
}
vector4f64_swizzle1 :: proc(v: Vector4f64, c0: Vector4_Components) -> f64 {
return v[c0];
}
vector4f64_swizzle2 :: proc(v: Vector4f64, c0, c1: Vector4_Components) -> Vector2f64 {
return {v[c0], v[c1]};
}
vector4f64_swizzle3 :: proc(v: Vector4f64, c0, c1, c2: Vector4_Components) -> Vector3f64 {
return {v[c0], v[c1], v[c2]};
}
vector4f64_swizzle4 :: proc(v: Vector4f64, c0, c1, c2, c3: Vector4_Components) -> Vector4f64 {
return {v[c0], v[c1], v[c2], v[c3]};
}
scalar_swizzle :: proc{
scalar_f32_swizzle1,
scalar_f32_swizzle2,
scalar_f32_swizzle3,
scalar_f32_swizzle4,
scalar_f64_swizzle1,
scalar_f64_swizzle2,
scalar_f64_swizzle3,
scalar_f64_swizzle4,
};
vector2_swizzle :: proc{
vector2f32_swizzle1,
vector2f32_swizzle2,
vector2f32_swizzle3,
vector2f32_swizzle4,
vector2f64_swizzle1,
vector2f64_swizzle2,
vector2f64_swizzle3,
vector2f64_swizzle4,
};
vector3_swizzle :: proc{
vector3f32_swizzle1,
vector3f32_swizzle2,
vector3f32_swizzle3,
vector3f32_swizzle4,
vector3f64_swizzle1,
vector3f64_swizzle2,
vector3f64_swizzle3,
vector3f64_swizzle4,
};
vector4_swizzle :: proc{
vector4f32_swizzle1,
vector4f32_swizzle2,
vector4f32_swizzle3,
vector4f32_swizzle4,
vector4f64_swizzle1,
vector4f64_swizzle2,
vector4f64_swizzle3,
vector4f64_swizzle4,
};
swizzle :: proc{
scalar_f32_swizzle1,
scalar_f32_swizzle2,
scalar_f32_swizzle3,
scalar_f32_swizzle4,
scalar_f64_swizzle1,
scalar_f64_swizzle2,
scalar_f64_swizzle3,
scalar_f64_swizzle4,
vector2f32_swizzle1,
vector2f32_swizzle2,
vector2f32_swizzle3,
vector2f32_swizzle4,
vector2f64_swizzle1,
vector2f64_swizzle2,
vector2f64_swizzle3,
vector2f64_swizzle4,
vector3f32_swizzle1,
vector3f32_swizzle2,
vector3f32_swizzle3,
vector3f32_swizzle4,
vector3f64_swizzle1,
vector3f64_swizzle2,
vector3f64_swizzle3,
vector3f64_swizzle4,
vector4f32_swizzle1,
vector4f32_swizzle2,
vector4f32_swizzle3,
vector4f32_swizzle4,
vector4f64_swizzle1,
vector4f64_swizzle2,
vector4f64_swizzle3,
vector4f64_swizzle4,
};