diff options
Diffstat (limited to 'intermediate')
-rw-r--r-- | intermediate/forward.h | 44 | ||||
-rw-r--r-- | intermediate/surface.glsl | 36 |
2 files changed, 51 insertions, 29 deletions
diff --git a/intermediate/forward.h b/intermediate/forward.h new file mode 100644 index 0000000..7c4c9d3 --- /dev/null +++ b/intermediate/forward.h @@ -0,0 +1,44 @@ +#ifndef forward_h +#define forward_h +#ifdef DESC + +[struct] +name: Light +[variable] +name: dir +type: vec3 +[variable] +name: brightness +type: float +[variable] +name: colour +type: vec3 +[variable] +name: caster_id +type: int + +[struct] +name: Caster +[variable] +name: projection +type: mat4 + +[struct] +name: Globals +[variable] +name: camera_pos +type: vec3 +[variable] +name: light_count +type: int +[variable] +name: frame +type: int + +[cbuffer] +name: globals +type: Globals +stage: fragment + +#endif +#endif diff --git a/intermediate/surface.glsl b/intermediate/surface.glsl index 10944ae..71a4307 100644 --- a/intermediate/surface.glsl +++ b/intermediate/surface.glsl @@ -3,6 +3,11 @@ type: graphics vertex: main fragment: main +#endif + +#include "forward.h" + +#ifdef DESC [binding] name: mesh @@ -56,33 +61,6 @@ type: float [variable] name: ao type: float -[variable] -name: light_count -type: int -[variable] -name: camera_pos -type: vec3 - -[struct] -name: Light -[variable] -name: dir -type: vec3 -[variable] -name: brightness -type: float -[variable] -name: colour -type: vec3 -[variable] -name: caster_id -type: int - -[struct] -name: Caster -[variable] -name: projection -type: mat4 [cbuffer] name: c_vp @@ -251,7 +229,7 @@ void main() { nrm = normalize(interpolator.tbn * nrm); vec3 col = texture(albedo, uv).rgb * material.albedo; - vec3 view_dir = normalize(material.camera_pos - p); + vec3 view_dir = normalize(globals.camera_pos - p); float met = texture(metal, uv).r * material.metalness; vec3 ref = reflect(-view_dir, nrm); vec3 ref_col = texture(env_cube, ref, material.roughness * 8.0).rgb; @@ -264,7 +242,7 @@ void main() { vec3 base_diffuse = diffuse_brdf(uv) * (1.0 - met); vec3 light = 0.0.xxx; - for (i = 0; i < material.light_count; i++) { + for (i = 0; i < globals.light_count; i++) { Light l = lights[i]; vec3 light_dir = l.dir; float cos_theta_i = max(dot(nrm, light_dir), 0.0); |