diff options
Diffstat (limited to 'src/shaders/unlit.c')
-rw-r--r-- | src/shaders/unlit.c | 38 |
1 files changed, 26 insertions, 12 deletions
diff --git a/src/shaders/unlit.c b/src/shaders/unlit.c index fe692f0..e5abdce 100644 --- a/src/shaders/unlit.c +++ b/src/shaders/unlit.c @@ -1,28 +1,42 @@ -#include "common_header.h" +#include "common.h" -#define light UV3(0) -#define maintex TEX(0) +/*uniforms*/ +#define object2world UM4(0) +#define light UV3(0) +#define maintex UTEX(0) -#define vert_color reg_v4_00 +/*varyings*/ +#define rough reg_num_00 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); - color_tocolor32(in->vertex->color, vert_color); + Vec4 normal = { + in->vertex->normal.x, + in->vertex->normal.y, + in->vertex->normal.z, + 1 + }; + Vec4 worldnormal; mat4_applytovec4(object2world, &normal, &worldnormal); + vec3_normalize(light, light); + *reg_num_00 = 1 - vec3_dot(&worldnormal, light); } -static bool frag(UniformCollection* uniforms, FragmentShaderIn* in, Color* color) { +static bool frag(UniformCollection* uniforms, FragmentShaderIn* in, Color32* color) { vec3_normalize(light, light); vec3_normalize(&in->normal, &in->normal); - float strongness = vec3_dot(light, &in->normal); - vec3_scale(vert_color, 1 - clamp(strongness, 0, 1), vert_color); - *color = color32_tocolor(vert_color); - //Color32 c = texture2d(maintex, &in->texcoord); - //*color = color32_tocolor(&c); + //float rough = 1- vec3_dot(&in->normal, light); + float roughness = *reg_num_00; + Color32 c = tex2d(maintex, in->texcoord); + //vec3_scale(&c, roughness, &c); + //color32_saturate(&c); + *color = c; return 1; } Program ssr_built_in_shader_unlit = { vert, frag, - VARYING_V4_00 | VARYING_TEXCOORD + VARYING_TEXCOORD | + VARYING_NORMAL | + VARYING_NUM_00 }; |