diff options
Diffstat (limited to 'source/blender/draw/engines/eevee/shaders/shadow_geom.glsl')
-rw-r--r-- | source/blender/draw/engines/eevee/shaders/shadow_geom.glsl | 35 |
1 files changed, 30 insertions, 5 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..ea51fa73a65 100644 --- a/source/blender/draw/engines/eevee/shaders/shadow_geom.glsl +++ b/source/blender/draw/engines/eevee/shaders/shadow_geom.glsl @@ -1,9 +1,14 @@ layout(std140) uniform shadow_render_block { mat4 ShadowMatrix[6]; + mat4 FaceViewMatrix[6]; vec4 lampPosition; - int layer; - float exponent; + float cubeTexelSize; + float storedTexelSize; + float nearClip; + float farClip; + int shadowSampleCount; + float shadowInvSampleCount; }; layout(triangles) in; @@ -12,15 +17,35 @@ layout(triangle_strip, max_vertices=3) out; in vec4 vPos[]; flat in int face[]; +#ifdef MESH_SHADER +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(); } |