summaryrefslogtreecommitdiff
path: root/src/shaders/common/mathlib.h
blob: fcc54ea099d76f422dfc12aa193b82f19eb8b459 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#ifndef SSR_SHADER_MATH_H
#define SSR_SHADER_MATH_H

#include "../../math/structs.h"

/************************************************************************/
/* constants                                                            */
/************************************************************************/

#define SSR_PI            3.14159265359f
#define SSR_TWO_PI        6.28318530718f
#define SSR_FOUR_PI       12.56637061436f
#define SSR_INV_PI        0.31830988618f
#define SSR_INV_TWO_PI    0.15915494309f
#define SSR_INV_FOUR_PI   0.07957747155f
#define SSR_HALF_PI       1.57079632679f
#define SSR_INV_HALF_PI   0.636619772367f

/************************************************************************/
/* Vec3                                                                 */
/************************************************************************/
Vec2 vec2(float x, float y);
Vec2 vec2_minus(Vec2 v1, Vec2 v2);
Vec2 vec2_plus(Vec2 v1, Vec2 v2);
float vec2_dot(Vec2 v1, Vec2 v2);

/************************************************************************/
/* Vec3                                                                 */
/************************************************************************/
Vec3 vec3(float x, float y, float z);
Vec3 vec3_minus(Vec3 v1, Vec3 v2);
Vec3 vec3_plus(Vec3 v1, Vec3 v2);
float vec3_dot(Vec3 v1, Vec3 v2);
Vec3 vec3_cross(Vec3 v1, Vec3 v2);
Vec3 vec3_lerp(Vec3 v1, Vec3 v2, float t);
Vec3 vec3_slerp(Vec3 v1, Vec3 v2, float t);
Vec3 vec3_scale(Vec3 v, float scale);
Vec3 vec3_normalize(Vec3 v);

/************************************************************************/
/* Vec4                                                                 */
/************************************************************************/
Vec4 vec4(float x, float y, float z, float w);
Vec4 vec4_minus(Vec4 v1, Vec4 v2);
Vec4 vec4_plus(Vec4 v1, Vec4 v2);
Vec4 vec4_scale(Vec4 v, float scale);
Vec4 vec4_saturate(Vec4 v);
Vec4 vec4_normalize(Vec4 v);

/************************************************************************/
/* Matrix                                                               */
/************************************************************************/
Mat3 mat3(Vec3 colum1, Vec3 colum2, Vec3 colum3); // colum major
Vec3 mat3_mulvec3(Mat3 m, Vec3 v);
Mat3 mat3_mulmat3(Mat3 m, Mat3 m2);

Mat4 mat4(Vec4 colum1, Vec4 colum2, Vec4 colum3, Vec4 colum4);
Vec3 mat4_mulvec3(Mat4 m, Vec3 v);
Vec4 mat4_mulvec4(Mat4 m, Vec4 v);
Mat4 mat4_mulmat4(Mat4 m, Mat4 m2);


#endif