diff --git a/Effects/building.eff b/Effects/building.eff index f50968f0a..c46cf6bd7 100644 --- a/Effects/building.eff +++ b/Effects/building.eff @@ -79,12 +79,14 @@ + Shaders/deferred-gbuffer.vert Shaders/deferred-gbuffer.frag Shaders/gbuffer-functions.frag + Shaders/gbuffer-encode.frag diff --git a/Effects/model-combined-deferred.eff b/Effects/model-combined-deferred.eff index 3897332e2..d0121ec7a 100644 --- a/Effects/model-combined-deferred.eff +++ b/Effects/model-combined-deferred.eff @@ -53,8 +53,7 @@ the objects that use it, and replaces it with the default shader. Shaders/ubershader.vert Shaders/ubershader-gbuffer.frag Shaders/gbuffer-functions.frag - + Shaders/gbuffer-encode.frag diff --git a/Effects/model-default.eff b/Effects/model-default.eff index c4ab897b4..5bc396735 100644 --- a/Effects/model-default.eff +++ b/Effects/model-default.eff @@ -195,6 +195,7 @@ Shaders/deferred-gbuffer.vert Shaders/deferred-gbuffer.frag Shaders/gbuffer-functions.frag + Shaders/gbuffer-encode.frag texture diff --git a/Effects/terrain-default.eff b/Effects/terrain-default.eff index 240232f1d..10e1549e7 100644 --- a/Effects/terrain-default.eff +++ b/Effects/terrain-default.eff @@ -465,6 +465,7 @@ Shaders/deferred-gbuffer.vert Shaders/deferred-gbuffer.frag Shaders/gbuffer-functions.frag + Shaders/gbuffer-encode.frag texture diff --git a/Effects/tree.eff b/Effects/tree.eff index c1bd27686..f3c028286 100644 --- a/Effects/tree.eff +++ b/Effects/tree.eff @@ -68,6 +68,7 @@ Shaders/deferred-tree.vert Shaders/deferred-tree.frag Shaders/gbuffer-functions.frag + Shaders/gbuffer-encode.frag texture diff --git a/Effects/urban.eff b/Effects/urban.eff index 90a20b3d1..d0bbbbdb7 100644 --- a/Effects/urban.eff +++ b/Effects/urban.eff @@ -159,6 +159,7 @@ Shaders/urban-gbuffer.vert Shaders/urban-gbuffer.frag Shaders/gbuffer-functions.frag + Shaders/gbuffer-encode.frag tangent 6 @@ -323,6 +324,7 @@ Shaders/urban-gbuffer.vert Shaders/urban-gbuffer.frag Shaders/gbuffer-functions.frag + Shaders/gbuffer-encode.frag tangent 6 diff --git a/Shaders/gbuffer-encode.frag b/Shaders/gbuffer-encode.frag new file mode 100644 index 000000000..931f959f3 --- /dev/null +++ b/Shaders/gbuffer-encode.frag @@ -0,0 +1,22 @@ +// -*- mode: C; -*- +// Licence: GPL v2 +// Author: Frederic Bouvier. + +uniform bool fg_DepthInColor; + +vec2 normal_encode(vec3 n); +vec3 float_to_color(in float f); + +// attachment 0: normal.x | normal.y | 0.0 | 1.0 +// attachment 1: diffuse.r | diffuse.g | diffuse.b | material Id +// attachment 2: specular.l | shininess | emission.l | unused +// attachment 3: ---------- depth ------------ | unused (optional) +// +void encode_gbuffer(vec3 normal, vec3 color, int mId, float specular, float shininess, float emission, float depth) +{ + gl_FragData[0] = vec4( normal_encode(normal), 0.0, 1.0 ); + gl_FragData[1] = vec4( color, float( mId ) / 255.0 ); + gl_FragData[2] = vec4( specular, shininess / 128.0, emission, 1.0 ); + if (fg_DepthInColor) + gl_FragData[3] = vec4(float_to_color(depth), 1.0); +} diff --git a/Shaders/gbuffer-functions.frag b/Shaders/gbuffer-functions.frag index 871a209ef..2c057a4eb 100644 --- a/Shaders/gbuffer-functions.frag +++ b/Shaders/gbuffer-functions.frag @@ -67,17 +67,3 @@ vec3 position( vec3 viewDir, vec2 coords, sampler2D depth_tex ) depth = texture2D( depth_tex, coords ).r; return position( viewDir, depth ); } - -// attachment 0: normal.x | normal.y | 0.0 | 1.0 -// attachment 1: diffuse.r | diffuse.g | diffuse.b | material Id -// attachment 2: specular.l | shininess | emission.l | unused -// attachment 3: ---------- depth ------------ | unused (optional) -// -void encode_gbuffer(vec3 normal, vec3 color, int mId, float specular, float shininess, float emission, float depth) -{ - gl_FragData[0] = vec4( normal_encode(normal), 0.0, 1.0 ); - gl_FragData[1] = vec4( color, float( mId ) / 255.0 ); - gl_FragData[2] = vec4( specular, shininess / 128.0, emission, 1.0 ); - if (fg_DepthInColor) - gl_FragData[3] = vec4(float_to_color(depth), 1.0); -}