2016-02-16 17:18:48 +00:00
#version 120
#if @diffuseMap
varying vec2 diffuseMapUV;
#endif
2016-02-16 21:32:59 +00:00
2016-02-17 01:52:44 +00:00
#if @darkMap
varying vec2 darkMapUV;
#endif
#if @detailMap
varying vec2 detailMapUV;
#endif
2016-03-01 17:41:36 +00:00
#if @decalMap
varying vec2 decalMapUV;
#endif
2016-02-17 01:52:44 +00:00
#if @emissiveMap
varying vec2 emissiveMapUV;
#endif
2016-02-17 23:00:12 +00:00
#if @normalMap
varying vec2 normalMapUV;
2016-06-16 16:07:10 +00:00
varying vec4 passTangent;
2016-02-17 23:00:12 +00:00
#endif
2016-02-18 22:05:44 +00:00
#if @envMap
varying vec2 envMapUV;
#endif
2016-02-20 18:02:11 +00:00
#if @specularMap
varying vec2 specularMapUV;
#endif
2016-02-16 21:32:59 +00:00
varying float depth;
2016-02-16 22:30:23 +00:00
2016-02-18 16:08:18 +00:00
#define PER_PIXEL_LIGHTING (@normalMap || @forcePPL)
2016-02-17 22:39:06 +00:00
#if !PER_PIXEL_LIGHTING
2016-02-17 02:07:18 +00:00
varying vec4 lighting;
2016-02-17 22:39:06 +00:00
#else
2016-02-18 22:05:44 +00:00
varying vec4 passColor;
2016-02-17 22:39:06 +00:00
#endif
2016-02-20 18:02:11 +00:00
varying vec3 passViewPos;
2016-03-22 20:12:16 +00:00
varying vec3 passNormal;
2016-02-16 22:30:23 +00:00
2017-09-20 23:25:48 +00:00
varying vec4 shadowSpaceCoords;
2016-02-17 22:29:26 +00:00
#include "lighting.glsl"
2016-02-16 22:30:23 +00:00
2016-02-16 17:18:48 +00:00
void main(void)
{
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
2016-02-16 21:32:59 +00:00
depth = gl_Position.z;
2016-02-16 17:18:48 +00:00
2016-02-17 01:04:30 +00:00
vec4 viewPos = (gl_ModelViewMatrix * gl_Vertex);
gl_ClipVertex = viewPos;
vec3 viewNormal = normalize((gl_NormalMatrix * gl_Normal).xyz);
2016-02-18 22:05:44 +00:00
#if @envMap
vec3 viewVec = normalize(viewPos.xyz);
vec3 r = reflect( viewVec, viewNormal );
float m = 2.0 * sqrt( r.x*r.x + r.y*r.y + (r.z+1.0)*(r.z+1.0) );
envMapUV = vec2(r.x/m + 0.5, r.y/m + 0.5);
#endif
2016-02-16 17:18:48 +00:00
#if @diffuseMap
2016-02-17 01:46:47 +00:00
diffuseMapUV = (gl_TextureMatrix[@diffuseMapUV] * gl_MultiTexCoord@diffuseMapUV).xy;
2016-02-16 17:18:48 +00:00
#endif
2016-02-16 22:30:23 +00:00
2016-02-17 01:52:44 +00:00
#if @darkMap
darkMapUV = (gl_TextureMatrix[@darkMapUV] * gl_MultiTexCoord@darkMapUV).xy;
#endif
#if @detailMap
2016-03-01 17:40:18 +00:00
detailMapUV = (gl_TextureMatrix[@detailMapUV] * gl_MultiTexCoord@detailMapUV).xy;
2016-02-17 01:52:44 +00:00
#endif
2016-03-01 17:41:36 +00:00
#if @decalMap
decalMapUV = (gl_TextureMatrix[@decalMapUV] * gl_MultiTexCoord@decalMapUV).xy;
#endif
2016-02-17 01:52:44 +00:00
#if @emissiveMap
emissiveMapUV = (gl_TextureMatrix[@emissiveMapUV] * gl_MultiTexCoord@emissiveMapUV).xy;
#endif
2016-02-17 23:00:12 +00:00
#if @normalMap
normalMapUV = (gl_TextureMatrix[@normalMapUV] * gl_MultiTexCoord@normalMapUV).xy;
2016-06-16 16:07:10 +00:00
passTangent = gl_MultiTexCoord7.xyzw;
2016-02-17 23:00:12 +00:00
#endif
2016-02-20 18:02:11 +00:00
#if @specularMap
specularMapUV = (gl_TextureMatrix[@specularMapUV] * gl_MultiTexCoord@specularMapUV).xy;
#endif
2016-02-17 22:39:06 +00:00
#if !PER_PIXEL_LIGHTING
2016-02-17 02:07:18 +00:00
lighting = doLighting(viewPos.xyz, viewNormal, gl_Color);
2016-02-17 22:39:06 +00:00
#else
2016-02-18 22:05:44 +00:00
passColor = gl_Color;
2016-02-17 22:39:06 +00:00
#endif
2016-02-20 18:02:11 +00:00
passViewPos = viewPos.xyz;
2016-03-22 20:12:16 +00:00
passNormal = gl_Normal.xyz;
2017-09-20 23:25:48 +00:00
// This matrix has the opposite handedness to the others used here, so multiplication must have the vector to the left. Alternatively it could be transposed after construction, but that's extra work for the GPU just to make the code look a tiny bit cleaner.
mat4 eyePlaneMat = mat4(gl_EyePlaneS[1], gl_EyePlaneT[1], gl_EyePlaneR[1], gl_EyePlaneQ[1]);
shadowSpaceCoords = viewPos * eyePlaneMat;
2016-02-16 17:18:48 +00:00
}