#pragma once #include "pxl8_types.h" typedef struct pxl8_vec2 { f32 x, y; } pxl8_vec2; typedef struct pxl8_vec3 { f32 x, y, z; } pxl8_vec3; typedef struct pxl8_vec4 { f32 x, y, z, w; } pxl8_vec4; typedef struct pxl8_mat4 { f32 m[16]; } pxl8_mat4; #ifdef __cplusplus extern "C" { #endif pxl8_vec2 pxl8_vec2_add(pxl8_vec2 a, pxl8_vec2 b); f32 pxl8_vec2_dot(pxl8_vec2 a, pxl8_vec2 b); f32 pxl8_vec2_length(pxl8_vec2 v); pxl8_vec2 pxl8_vec2_normalize(pxl8_vec2 v); pxl8_vec2 pxl8_vec2_scale(pxl8_vec2 v, f32 s); pxl8_vec2 pxl8_vec2_sub(pxl8_vec2 a, pxl8_vec2 b); pxl8_vec3 pxl8_vec3_add(pxl8_vec3 a, pxl8_vec3 b); pxl8_vec3 pxl8_vec3_cross(pxl8_vec3 a, pxl8_vec3 b); f32 pxl8_vec3_dot(pxl8_vec3 a, pxl8_vec3 b); f32 pxl8_vec3_length(pxl8_vec3 v); pxl8_vec3 pxl8_vec3_normalize(pxl8_vec3 v); pxl8_vec3 pxl8_vec3_scale(pxl8_vec3 v, f32 s); pxl8_vec3 pxl8_vec3_sub(pxl8_vec3 a, pxl8_vec3 b); pxl8_mat4 pxl8_mat4_identity(void); pxl8_mat4 pxl8_mat4_lookat(pxl8_vec3 eye, pxl8_vec3 center, pxl8_vec3 up); pxl8_mat4 pxl8_mat4_multiply(pxl8_mat4 a, pxl8_mat4 b); pxl8_vec4 pxl8_mat4_multiply_vec4(pxl8_mat4 m, pxl8_vec4 v); pxl8_mat4 pxl8_mat4_ortho(f32 left, f32 right, f32 bottom, f32 top, f32 near, f32 far); pxl8_mat4 pxl8_mat4_perspective(f32 fov, f32 aspect, f32 near, f32 far); pxl8_mat4 pxl8_mat4_rotate_x(f32 angle); pxl8_mat4 pxl8_mat4_rotate_y(f32 angle); pxl8_mat4 pxl8_mat4_rotate_z(f32 angle); pxl8_mat4 pxl8_mat4_scale(f32 x, f32 y, f32 z); pxl8_mat4 pxl8_mat4_translate(f32 x, f32 y, f32 z); #ifdef __cplusplus } #endif