diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2017-07-11 02:10:57 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2017-07-11 13:39:35 +0300 |
commit | 91d324b3dcf1e5ecff133ff3c27ba5e1f0849209 (patch) | |
tree | 033a2d0d7e04963f101ff0f8489f5720842308ec /source/blender/draw/engines/eevee/shaders/shadow_geom.glsl | |
parent | a57bc75576e780797a60e2240a12f49247ca9505 (diff) |
Eevee: Transparency: Add support for Clip and Stochastic shadows.
Diffstat (limited to 'source/blender/draw/engines/eevee/shaders/shadow_geom.glsl')
-rw-r--r-- | source/blender/draw/engines/eevee/shaders/shadow_geom.glsl | 28 |
1 files changed, 25 insertions, 3 deletions
diff --git a/source/blender/draw/engines/eevee/shaders/shadow_geom.glsl b/source/blender/draw/engines/eevee/shaders/shadow_geom.glsl index afc78c4a8f8..d9d30c4d9e6 100644 --- a/source/blender/draw/engines/eevee/shaders/shadow_geom.glsl +++ b/source/blender/draw/engines/eevee/shaders/shadow_geom.glsl @@ -1,6 +1,7 @@ layout(std140) uniform shadow_render_block { mat4 ShadowMatrix[6]; + mat4 FaceViewMatrix[6]; vec4 lampPosition; int layer; float exponent; @@ -12,15 +13,36 @@ layout(triangle_strip, max_vertices=3) out; in vec4 vPos[]; flat in int face[]; +#ifdef MESH_SHADER +in vec3 vNor[]; +in vec3 vNor[]; +#endif + out vec3 worldPosition; +#ifdef MESH_SHADER +out vec3 viewPosition; /* Required. otherwise generate linking error. */ +out vec3 worldNormal; /* Required. otherwise generate linking error. */ +out vec3 viewNormal; /* Required. otherwise generate linking error. */ +flat out int shFace; +#else +int shFace; +#endif void main() { - int f = face[0]; - gl_Layer = f; + shFace = face[0]; + gl_Layer = shFace; for (int v = 0; v < 3; ++v) { - gl_Position = ShadowMatrix[f] * vPos[v]; + gl_Position = ShadowMatrix[shFace] * vPos[v]; worldPosition = vPos[v].xyz; +#ifdef MESH_SHADER + worldNormal = vNor[v]; + viewPosition = (FaceViewMatrix[shFace] * vec4(worldPosition, 1.0)).xyz; + viewNormal = (FaceViewMatrix[shFace] * vec4(worldNormal, 0.0)).xyz; +#ifdef ATTRIB + pass_attrib(v); +#endif +#endif EmitVertex(); } |