diff options
Diffstat (limited to 'src/shaders')
-rw-r--r-- | src/shaders/default.c | 4 | ||||
-rw-r--r-- | src/shaders/pbr.c | 65 | ||||
-rw-r--r-- | src/shaders/unlit.c | 4 |
3 files changed, 69 insertions, 4 deletions
diff --git a/src/shaders/default.c b/src/shaders/default.c index df3f121..00b436c 100644 --- a/src/shaders/default.c +++ b/src/shaders/default.c @@ -13,14 +13,14 @@ static void vert(UniformCollection* uniforms, VertexShaderIn* in, Vec4* clipcoord) { static Vec4 p; p.xyz = in->vertex->position; p.w = 1; - mat4_applytovec4(uniforms->mvp, &p, clipcoord); + mat4_mulvec4(uniforms->mvp, &p, clipcoord); Vec4 normal = { in->vertex->normal.x, in->vertex->normal.y, in->vertex->normal.z, 1 }; - Vec4 worldnormal; mat4_applytovec4(object2world, &normal, &worldnormal); + Vec4 worldnormal; mat4_mulvec4(object2world, &normal, &worldnormal); vec3_normalize(light, light); *rough = 1 - vec3_dot(&worldnormal, light); } diff --git a/src/shaders/pbr.c b/src/shaders/pbr.c new file mode 100644 index 0000000..c154f02 --- /dev/null +++ b/src/shaders/pbr.c @@ -0,0 +1,65 @@ +#include "common.h" + +/*uniforms*/ +#define object2world UM4(0) +#define light UV3(0) + +#define albedo_tex UTEX(0) +#define noraml_tex UTEX(1) +#define roughness_tex UTEX(2) +#define metalness_tex UTEX(3) + +/*varyings*/ +#define rough reg_num_00 +#define world_pos reg_v3_00 +#define depth_pos reg_v3_01 +#define clip_pos reg_v4_00 +#define world_normal reg_v3_02 +#define world_tangent reg_v3_03 +#define world_bitangent reg_v3_04 + +static void vert(UniformCollection* uniforms, VertexShaderIn* in, Vec4* clipcoord) { + static Vec4 p; p.xyz = in->vertex->position; p.w = 1; + mat4_mulvec4(uniforms->mvp, &p, clipcoord); + Vec4 normal = { + in->vertex->normal.x, + in->vertex->normal.y, + in->vertex->normal.z, + 1 + }; + Vec4 worldnormal; mat4_mulvec4(object2world, &normal, &worldnormal); + vec3_normalize(light, light); + *rough = 1 - vec3_dot(&worldnormal, light); +} + +static bool frag(UniformCollection* uniforms, FragmentShaderIn* in, Color32* color) { + vec3_normalize(light, light); + vec3_normalize(&in->normal, &in->normal); + float roughness = *rough; + //(*color).r = 1; + //(*color).g = 1; + //(*color).b = 1; + //(*color).a = 1; + //return 1; + //float rough = 1- vec3_dot(&in->normal, light); + Color32 c = tex2d(albedo_tex, in->texcoord); + //Color32 nc = tex2d(noramltex, in->texcoord); + //vec3_scale(&c, roughness, &c); + color32_saturate(&c); + *color = c; + return 1; +} + +Program ssr_built_in_shader_pbr = { + vert, frag, + VARYING_TEXCOORD | + VARYING_NORMAL | + + VARYING_NUM_00 | + VARYING_V3_00 | + VARYING_V3_01 | + VARYING_V3_02 | + VARYING_V3_03 | + VARYING_V3_04 | + VARYING_V4_00 +};
\ No newline at end of file diff --git a/src/shaders/unlit.c b/src/shaders/unlit.c index e5abdce..59510dd 100644 --- a/src/shaders/unlit.c +++ b/src/shaders/unlit.c @@ -10,14 +10,14 @@ static void vert(UniformCollection* uniforms, VertexShaderIn* in, Vec4* clipcoord) { static Vec4 p; p.xyz = in->vertex->position; p.w = 1; - mat4_applytovec4(uniforms->mvp, &p, clipcoord); + mat4_mulvec4(uniforms->mvp, &p, clipcoord); Vec4 normal = { in->vertex->normal.x, in->vertex->normal.y, in->vertex->normal.z, 1 }; - Vec4 worldnormal; mat4_applytovec4(object2world, &normal, &worldnormal); + Vec4 worldnormal; mat4_mulvec4(object2world, &normal, &worldnormal); vec3_normalize(light, light); *reg_num_00 = 1 - vec3_dot(&worldnormal, light); } |