diff options
Diffstat (limited to 'source/blender/draw/engines/eevee/shaders/lit_surface_vert.glsl')
-rw-r--r-- | source/blender/draw/engines/eevee/shaders/lit_surface_vert.glsl | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/source/blender/draw/engines/eevee/shaders/lit_surface_vert.glsl b/source/blender/draw/engines/eevee/shaders/lit_surface_vert.glsl new file mode 100644 index 00000000000..58bcea7d605 --- /dev/null +++ b/source/blender/draw/engines/eevee/shaders/lit_surface_vert.glsl @@ -0,0 +1,71 @@ + +uniform mat4 ModelViewProjectionMatrix; +uniform mat4 ModelMatrix; +uniform mat4 ModelViewMatrix; +uniform mat3 WorldNormalMatrix; +#ifndef ATTRIB +uniform mat3 NormalMatrix; +uniform mat4 ModelMatrixInverse; +#endif + +#ifndef HAIR_SHADER +in vec3 pos; +in vec3 nor; +#endif + +out vec3 worldPosition; +out vec3 viewPosition; + +/* Used for planar reflections */ +/* keep in sync with EEVEE_ClipPlanesUniformBuffer */ +layout(std140) uniform clip_block { + vec4 ClipPlanes[1]; +}; + +#ifdef USE_FLAT_NORMAL +flat out vec3 worldNormal; +flat out vec3 viewNormal; +#else +out vec3 worldNormal; +out vec3 viewNormal; +#endif + +#ifdef HAIR_SHADER +out vec3 hairTangent; +out float hairThickTime; +out float hairThickness; +out float hairTime; +flat out int hairStrandID; +#endif + +void main() +{ +#ifdef HAIR_SHADER + hairStrandID = hair_get_strand_id(); + vec3 pos, binor; + hair_get_pos_tan_binor_time( + (ProjectionMatrix[3][3] == 0.0), + ViewMatrixInverse[3].xyz, ViewMatrixInverse[2].xyz, + pos, hairTangent, binor, hairTime, hairThickness, hairThickTime); + + gl_Position = ViewProjectionMatrix * vec4(pos, 1.0); + viewPosition = (ViewMatrix * vec4(pos, 1.0)).xyz; + worldPosition = pos; + hairTangent = normalize(hairTangent); + worldNormal = cross(binor, hairTangent); + viewNormal = normalize(mat3(ViewMatrix) * worldNormal); +#else + gl_Position = ModelViewProjectionMatrix * vec4(pos, 1.0); + viewPosition = (ModelViewMatrix * vec4(pos, 1.0)).xyz; + worldPosition = (ModelMatrix * vec4(pos, 1.0)).xyz; + worldNormal = normalize(WorldNormalMatrix * nor); + viewNormal = normalize(NormalMatrix * nor); +#endif + + /* Used for planar reflections */ + gl_ClipDistance[0] = dot(vec4(worldPosition, 1.0), ClipPlanes[0]); + +#ifdef ATTRIB + pass_attrib(pos); +#endif +} |