169 lines
4.6 KiB
C
169 lines
4.6 KiB
C
#pragma once
|
|
|
|
#include "iron_array.h"
|
|
#include "iron_global.h"
|
|
#include <stdint.h>
|
|
|
|
#define IRON_PI 3.14159265358979323846
|
|
#define IRON_TAU 6.283185307
|
|
|
|
typedef struct vec2 {
|
|
float x;
|
|
float y;
|
|
} vec2_t;
|
|
|
|
typedef struct vec3 {
|
|
float x;
|
|
float y;
|
|
float z;
|
|
} vec3_t;
|
|
|
|
typedef struct vec4 {
|
|
float x;
|
|
float y;
|
|
float z;
|
|
float w;
|
|
} vec4_t;
|
|
|
|
typedef struct quat {
|
|
float x;
|
|
float y;
|
|
float z;
|
|
float w;
|
|
} quat_t;
|
|
|
|
typedef union mat3 {
|
|
float m[3 * 3];
|
|
struct {
|
|
float m00;
|
|
float m01;
|
|
float m02;
|
|
float m10;
|
|
float m11;
|
|
float m12;
|
|
float m20;
|
|
float m21;
|
|
float m22;
|
|
};
|
|
} mat3_t;
|
|
|
|
typedef union mat4 {
|
|
float m[4 * 4];
|
|
struct {
|
|
float m00;
|
|
float m01;
|
|
float m02;
|
|
float m03;
|
|
float m10;
|
|
float m11;
|
|
float m12;
|
|
float m13;
|
|
float m20;
|
|
float m21;
|
|
float m22;
|
|
float m23;
|
|
float m30;
|
|
float m31;
|
|
float m32;
|
|
float m33;
|
|
};
|
|
} mat4_t;
|
|
|
|
void iron_color_components(uint32_t color, float *red, float *green, float *blue, float *alpha);
|
|
void iron_random_init(int64_t seed);
|
|
int64_t iron_random_get(void);
|
|
int64_t iron_random_get_max(int64_t max);
|
|
int64_t iron_random_get_in(int64_t min, int64_t max);
|
|
|
|
float vec2_len(vec2_t v);
|
|
vec2_t vec2_set_len(vec2_t v, float length);
|
|
vec2_t vec2_mult(vec2_t a, float f);
|
|
vec2_t vec2_add(vec2_t a, vec2_t b);
|
|
vec2_t vec2_sub(vec2_t a, vec2_t b);
|
|
float vec2_cross(vec2_t a, vec2_t b);
|
|
vec2_t vec2_norm(vec2_t v);
|
|
float vec2_dot(vec2_t a, vec2_t b);
|
|
vec2_t vec2_nan();
|
|
bool vec2_isnan(vec2_t v);
|
|
|
|
vec4_t vec4_cross(vec4_t a, vec4_t b);
|
|
vec4_t vec4_add(vec4_t a, vec4_t b);
|
|
vec4_t vec4_fadd(vec4_t a, float x, float y, float z, float w);
|
|
vec4_t vec4_norm(vec4_t a);
|
|
vec4_t vec4_mult(vec4_t v, float f);
|
|
float vec4_dot(vec4_t a, vec4_t b);
|
|
vec4_t vec4_apply_proj(vec4_t a, mat4_t m);
|
|
vec4_t vec4_apply_mat4(vec4_t a, mat4_t m);
|
|
vec4_t vec4_apply_axis_angle(vec4_t a, vec4_t axis, float angle);
|
|
vec4_t vec4_apply_quat(vec4_t a, quat_t q);
|
|
bool vec4_equals(vec4_t a, vec4_t b);
|
|
bool vec4_almost_equals(vec4_t a, vec4_t b, float prec);
|
|
float vec4_len(vec4_t a);
|
|
vec4_t vec4_sub(vec4_t a, vec4_t b);
|
|
float vec4_dist(vec4_t v1, vec4_t v2);
|
|
float vec4_fdist(float v1x, float v1y, float v1z, float v2x, float v2y, float v2z);
|
|
vec4_t vec4_reflect(vec4_t a, vec4_t n);
|
|
vec4_t vec4_clamp(vec4_t a, float min, float max);
|
|
vec4_t vec4_x_axis();
|
|
vec4_t vec4_y_axis();
|
|
vec4_t vec4_z_axis();
|
|
vec4_t vec4_nan();
|
|
bool vec4_isnan(vec4_t v);
|
|
|
|
quat_t quat_from_axis_angle(vec4_t axis, float angle);
|
|
quat_t quat_from_mat(mat4_t m);
|
|
quat_t quat_from_rot_mat(mat4_t m);
|
|
quat_t quat_mult(quat_t a, quat_t b);
|
|
quat_t quat_norm(quat_t q);
|
|
vec4_t quat_get_euler(quat_t q);
|
|
quat_t quat_from_euler(float x, float y, float z);
|
|
float quat_dot(quat_t a, quat_t b);
|
|
quat_t quat_from_to(vec4_t v0, vec4_t v1);
|
|
quat_t quat_inv(quat_t q);
|
|
quat_t quat_slerp(quat_t a, quat_t b, float t);
|
|
|
|
mat3_t mat3_identity();
|
|
mat3_t mat3_translation(float x, float y);
|
|
mat3_t mat3_rotation(float alpha);
|
|
mat3_t mat3_scale(mat3_t m, vec4_t v);
|
|
mat3_t mat3_set_from4(mat4_t m4);
|
|
mat3_t mat3_multmat(mat3_t a, mat3_t b);
|
|
mat3_t mat3_transpose(mat3_t m);
|
|
mat3_t mat3_nan();
|
|
bool mat3_isnan(mat3_t m);
|
|
|
|
typedef struct mat4_decomposed {
|
|
vec4_t loc;
|
|
quat_t rot;
|
|
vec4_t scl;
|
|
} mat4_decomposed_t;
|
|
|
|
mat4_t mat4_identity();
|
|
mat4_t mat4_from_f32_array(f32_array_t *a, int offset);
|
|
mat4_t mat4_persp(float fov_y, float aspect, float zn, float zf);
|
|
mat4_t mat4_ortho(float left, float right, float bottom, float top, float znear, float zfar);
|
|
mat4_t mat4_rot_z(float alpha);
|
|
mat4_t mat4_compose(vec4_t loc, quat_t rot, vec4_t scl);
|
|
mat4_decomposed_t *mat4_decompose(mat4_t m);
|
|
mat4_t mat4_set_loc(mat4_t m, vec4_t v);
|
|
mat4_t mat4_from_quat(quat_t q);
|
|
mat4_t mat4_translate(mat4_t m, float x, float y, float z);
|
|
mat4_t mat4_scale(mat4_t m, vec4_t v);
|
|
mat4_t mat4_mult_mat3x4(mat4_t a, mat4_t b);
|
|
mat4_t mat4_mult_mat(mat4_t a, mat4_t b);
|
|
mat4_t mat4_inv(mat4_t a);
|
|
mat4_t mat4_transpose(mat4_t m);
|
|
mat4_t mat4_transpose3(mat4_t m);
|
|
vec4_t mat4_get_loc(mat4_t m);
|
|
vec4_t mat4_get_scale(mat4_t m);
|
|
mat4_t mat4_mult(mat4_t m, float s);
|
|
mat4_t mat4_to_rot(mat4_t m);
|
|
vec4_t mat4_right(mat4_t m);
|
|
vec4_t mat4_look(mat4_t m);
|
|
vec4_t mat4_up(mat4_t m);
|
|
f32_array_t *mat4_to_f32_array(mat4_t m);
|
|
float mat4_cofactor(float m0, float m1, float m2, float m3, float m4, float m5, float m6, float m7, float m8);
|
|
float mat4_determinant(mat4_t m);
|
|
mat4_t mat4_nan();
|
|
bool mat4_isnan(mat4_t m);
|