summaryrefslogtreecommitdiff
path: root/src/shaders
diff options
context:
space:
mode:
Diffstat (limited to 'src/shaders')
-rw-r--r--src/shaders/common/core.c (renamed from src/shaders/common.c)11
-rw-r--r--src/shaders/common/core.h (renamed from src/shaders/common.h)16
-rw-r--r--src/shaders/common/light.c0
-rw-r--r--src/shaders/common/light.h0
-rw-r--r--src/shaders/common/mathlib.c138
-rw-r--r--src/shaders/common/mathlib.h63
-rw-r--r--src/shaders/common/shadow.c0
-rw-r--r--src/shaders/common/shadow.h6
-rw-r--r--src/shaders/default.c2
-rw-r--r--src/shaders/pbr.c19
-rw-r--r--src/shaders/unlit.c2
11 files changed, 218 insertions, 39 deletions
diff --git a/src/shaders/common.c b/src/shaders/common/core.c
index 333b433..703458c 100644
--- a/src/shaders/common.c
+++ b/src/shaders/common/core.c
@@ -1,4 +1,4 @@
-#include "common.h"
+#include "core.h"
Vec4 _proj_params;
Vec2 _time;
@@ -15,15 +15,6 @@ Vec3 unpacknormal(Color32 c32) {
Mat4 mat4(Vec4* c1, Vec4* c2, Vec4* c3, Vec4* c4);
-Mat3 mat3(Vec3* c1, Vec3* c2, Vec3* c3) {
- Mat3 m = {
- c1->x,c1->y,c1->z,
- c2->x,c2->y,c2->z,
- c3->x,c3->y,c3->z,
- };
- return m;
-}
-
Vec2 texsize(Texture* texture) {
Vec2 size = {texture->width, texture->height};
return size;
diff --git a/src/shaders/common.h b/src/shaders/common/core.h
index 8d0ac83..623409e 100644
--- a/src/shaders/common.h
+++ b/src/shaders/common/core.h
@@ -1,19 +1,7 @@
#ifndef _SOFTSHADEROOM_COMMON_HEADER_H_
#define _SOFTSHADEROOM_COMMON_HEADER_H_
-#include "../core/shader.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
+#include "../../core/shader.h"
+#include "mathlib.h"
/************************************************************************/
/* variables */
diff --git a/src/shaders/common/light.c b/src/shaders/common/light.c
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/shaders/common/light.c
diff --git a/src/shaders/common/light.h b/src/shaders/common/light.h
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/shaders/common/light.h
diff --git a/src/shaders/common/mathlib.c b/src/shaders/common/mathlib.c
new file mode 100644
index 0000000..356357c
--- /dev/null
+++ b/src/shaders/common/mathlib.c
@@ -0,0 +1,138 @@
+#include "mathlib.h"
+#include "../../math/math.h"
+
+#define INTERNAL_FUNCTION(T, NAME)\
+T NAME(T v1, T v2) {\
+ T out; \
+ internal_##NAME(&v1, &v2, &out);\
+ return out;\
+}
+
+/************************************************************************/
+/* Vec2 */
+/************************************************************************/
+Vec2 vec2(float x, float y) {
+ Vec2 v = {x, y};
+ return v;
+}
+
+INTERNAL_FUNCTION(Vec2, vec2_minus);
+INTERNAL_FUNCTION(Vec2, vec2_plus);
+
+float vec2_dot(Vec2 v1, Vec2 v2) {
+ return internal_vec2_dot(&v1, &v2);
+}
+
+/************************************************************************/
+/* Vec3 */
+/************************************************************************/
+Vec3 vec3(float x, float y, float z) {
+ Vec3 v = {x, y, z};
+ return v;
+}
+
+INTERNAL_FUNCTION(Vec3, vec3_minus);
+INTERNAL_FUNCTION(Vec3, vec3_plus);
+INTERNAL_FUNCTION(Vec3, vec3_cross);
+
+float vec3_dot(Vec3 v1, Vec3 v2) {
+ return internal_vec3_dot(&v1, &v2);
+}
+
+Vec3 vec3_lerp(Vec3 v1, Vec3 v2, float t) {
+ Vec3 out;
+ internal_vec3_lerp(&v1, &v2, t, &out);
+ return out;
+}
+
+Vec3 vec3_slerp(Vec3 v1, Vec3 v2, float t) {
+ Vec3 out;
+ internal_vec3_slerp(&v1, &v2, t, &out);
+ return out;
+}
+
+Vec3 vec3_scale(Vec3 v, float scale) {
+ Vec3 out;
+ internal_vec3_scale(&v, scale, &out);
+ return out;
+}
+
+Vec3 vec3_normalize(Vec3 v) {
+ Vec3 out;
+ internal_vec3_normalize(&v, &out);
+ return out;
+}
+
+/************************************************************************/
+/* Vec4 */
+/************************************************************************/
+
+Vec4 vec4(float x, float y, float z, float w) {
+ Vec4 v = {x, y, z, w};
+ return v;
+}
+
+INTERNAL_FUNCTION(Vec4, vec4_minus);
+INTERNAL_FUNCTION(Vec4, vec4_plus);
+
+Vec4 vec4_scale(Vec4 v, float scale) {
+ Vec4 out;
+ internal_vec4_scale(&v, scale, &out);
+ return out;
+}
+
+Vec4 vec4_saturate(Vec4 v) {
+ Vec4 out;
+ out.x = clamp(v.x, 0, 1);
+ out.y = clamp(v.y, 0, 1);
+ out.z = clamp(v.z, 0, 1);
+ out.w = clamp(v.w, 0, 1);
+ return out;
+}
+
+/************************************************************************/
+/* Matrix */
+/************************************************************************/
+
+Mat3 mat3(Vec3 c1, Vec3 c2, Vec3 c3) {
+ Mat3 m = {c1, c2, c3};
+ return m;
+}
+
+Vec3 mat3_mulvec3(Mat3 m, Vec3 v) {
+ Vec3 out;
+ internal_mat3_multvec3(&m, &v, &out);
+ return out;
+}
+
+Mat3 mat3_mulmat3(Mat3 m, Mat3 m2) {
+ Mat3 out;
+ internal_mat3_multmat3(&m, &m2, &out);
+ return out;
+}
+
+Mat4 mat4(Vec4 c1, Vec4 c2, Vec4 c3, Vec4 c4) {
+ Mat4 m ;
+ m.axisx = c1;
+ m.axisy = c2;
+ m.axisz = c3;
+ m.pos = c4;
+ return m;
+}
+
+Vec3 mat4_mulvec3(Mat4 m, Vec3 v) {
+ Vec4 v2 = {v.x, v.y, v.z, 0};
+ return mat4_mulvec4(m, v2).xyz;
+}
+
+Vec4 mat4_mulvec4(Mat4 m, Vec4 v) {
+ Vec4 out;
+ internal_mat4_mulvec4(&m, &v, &out);
+ return out;
+}
+
+Mat4 mat4_mulmat4(Mat4 m1, Mat4 m2) {
+ Mat4 out;
+ internal_mat4_multiply(&m1, &m2, &out);
+ return out;
+}
diff --git a/src/shaders/common/mathlib.h b/src/shaders/common/mathlib.h
new file mode 100644
index 0000000..fcc54ea
--- /dev/null
+++ b/src/shaders/common/mathlib.h
@@ -0,0 +1,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 \ No newline at end of file
diff --git a/src/shaders/common/shadow.c b/src/shaders/common/shadow.c
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/shaders/common/shadow.c
diff --git a/src/shaders/common/shadow.h b/src/shaders/common/shadow.h
new file mode 100644
index 0000000..2fef82d
--- /dev/null
+++ b/src/shaders/common/shadow.h
@@ -0,0 +1,6 @@
+#ifndef _SSR_SHADOW_H_
+#define _SSR_SHADOW_H_
+
+
+
+#endif \ No newline at end of file
diff --git a/src/shaders/default.c b/src/shaders/default.c
index 6d12c8e..d348cdf 100644
--- a/src/shaders/default.c
+++ b/src/shaders/default.c
@@ -1,4 +1,4 @@
-#include "common.h"
+#include "common/core.h"
/*uniforms*/
#define object2world UM4(0)
diff --git a/src/shaders/pbr.c b/src/shaders/pbr.c
index 89556af..bbf1c2b 100644
--- a/src/shaders/pbr.c
+++ b/src/shaders/pbr.c
@@ -1,4 +1,4 @@
-#include "common.h"
+#include "common/core.h"
/*uniforms*/
#define _object2world UM4(0)
@@ -22,14 +22,8 @@
static void vert(UniformCollection* uniforms, VertexShaderIn* in, Vec4* clipcoord) {
static Vec4 p; p.xyz = in->vertex->position; p.w = 1;
object2clip(&p, clipcoord);
- Vec4 normal = {
- in->vertex->normal.x,
- in->vertex->normal.y,
- in->vertex->normal.z,
- 1
- };
- Vec4 worldnormal; internal_mat4_mulvec4(_object2world, &normal, &worldnormal);
- internal_vec3_normalize(_light, _light);
+ Vec3 worldnormal = mat4_mulvec3(*_object2world, in->vertex->normal);
+ worldnormal = vec3_normalize(worldnormal);
//*rough = 1 - internal_vec3_dot(&worldnormal, light);
//*vnormal = in->vertex->normal;
*_texcoord = in->vertex->texcoord;
@@ -37,7 +31,7 @@ static void vert(UniformCollection* uniforms, VertexShaderIn* in, Vec4* clipcoor
_clip_pos->y = clipcoord->w;
}
-static bool frag(UniformCollection* uniforms, FragmentShaderIn* in, Color32* color) {
+static bool frag(UniformCollection* uniforms, FragmentShaderIn* in, Vec4* color) {
//internal_vec3_normalize(light, light);
//internal_vec3_normalize(vnormal, vnormal);
//float roughness = *rough;
@@ -50,11 +44,10 @@ static bool frag(UniformCollection* uniforms, FragmentShaderIn* in, Color32* col
float depth = _clip_pos->x / _clip_pos->y;
depth = (depth + 1) / 2;
depth = linear01depth(depth);
- Color32 c = tex2d(_albedo_tex, _texcoord);
+ Vec4 c = tex2d(_albedo_tex, _texcoord);
//Color32 nc = tex2d(noramltex, in->texcoord);
//internal_vec3_scale(&c, roughness, &c);
- color32_saturate(&c);
- *color = c;
+ *color = vec4_saturate(c);
//internal_vec3_scale(color, 1 - depth, color);
return 1;
}
diff --git a/src/shaders/unlit.c b/src/shaders/unlit.c
index e887d07..5e1b1c1 100644
--- a/src/shaders/unlit.c
+++ b/src/shaders/unlit.c
@@ -1,4 +1,4 @@
-#include "common.h"
+#include "common/core.h"
/*uniforms*/
#define object2world UM4(0)