|
- #ifndef DIRECTIONAL_LIGHT_COUNT
- #define DIRECTIONAL_LIGHT_COUNT 0
- #endif
- #ifndef SPOT_LIGHT_COUNT
- #define SPOT_LIGHT_COUNT 0
- #endif
- #ifndef POINT_LIGHT_COUNT
- #define POINT_LIGHT_COUNT 0
- #endif
- #if (DIRECTIONAL_LIGHT_COUNT > 0) || (POINT_LIGHT_COUNT > 0) || (SPOT_LIGHT_COUNT > 0)
- #define LIGHTING
- #endif
-
- ///////////////////////////////////////////////////////////
- // Attributes
- attribute vec4 a_position;
- #if !defined(NORMAL_MAP) && defined(LIGHTING)
- attribute vec3 a_normal;
- #endif
- attribute vec2 a_texCoord0;
-
- ///////////////////////////////////////////////////////////
- // Uniforms
- uniform mat4 u_worldViewProjectionMatrix;
- #if !defined(NORMAL_MAP) && defined(LIGHTING)
- uniform mat4 u_normalMatrix;
- #endif
-
- #if defined(LIGHTING)
-
- uniform mat4 u_inverseTransposeWorldViewMatrix;
-
- #if (POINT_LIGHT_COUNT > 0) || (SPOT_LIGHT_COUNT > 0)
- uniform mat4 u_worldViewMatrix;
- #endif
-
- #if (DIRECTIONAL_LIGHT_COUNT > 0)
- uniform vec3 u_directionalLightDirection[DIRECTIONAL_LIGHT_COUNT];
- #endif
-
- #if (POINT_LIGHT_COUNT > 0)
- uniform vec3 u_pointLightPosition[POINT_LIGHT_COUNT];
- #endif
-
- #if (SPOT_LIGHT_COUNT > 0)
- uniform vec3 u_spotLightPosition[SPOT_LIGHT_COUNT];
- uniform vec3 u_spotLightDirection[SPOT_LIGHT_COUNT];
- #endif
-
- #endif
-
- ///////////////////////////////////////////////////////////
- // Varyings
-
- #if defined(LIGHTING)
- varying vec3 v_normalVector;
-
- #if (DIRECTIONAL_LIGHT_COUNT > 0)
- varying vec3 v_lightDirection[DIRECTIONAL_LIGHT_COUNT];
- #endif
-
- #if (POINT_LIGHT_COUNT > 0)
- varying vec3 v_vertexToPointLightDirection[POINT_LIGHT_COUNT];
- #endif
-
- #if (SPOT_LIGHT_COUNT > 0)
- varying vec3 v_vertexToSpotLightDirection[SPOT_LIGHT_COUNT];
- #endif
-
- #include "lighting.vert"
-
- #endif
-
- varying vec2 v_texCoord0;
- #if LAYER_COUNT > 0
- varying vec2 v_texCoordLayer0;
- #endif
- #if LAYER_COUNT > 1
- varying vec2 v_texCoordLayer1;
- #endif
- #if LAYER_COUNT > 2
- varying vec2 v_texCoordLayer2;
- #endif
-
-
- void main()
- {
- // Transform position to clip space.
- gl_Position = u_worldViewProjectionMatrix * a_position;
-
- #if defined(LIGHTING)
-
- #if !defined(NORMAL_MAP)
- v_normalVector = normalize((u_normalMatrix * vec4(a_normal.x, a_normal.y, a_normal.z, 0)).xyz);
- #endif
-
- applyLight(a_position);
-
- #endif
-
- // Pass base texture coord
- v_texCoord0 = a_texCoord0;
-
- // Pass repeated texture coordinates for each layer
- #if LAYER_COUNT > 0
- v_texCoordLayer0 = a_texCoord0 * TEXTURE_REPEAT_0;
- #endif
- #if LAYER_COUNT > 1
- v_texCoordLayer1 = a_texCoord0 * TEXTURE_REPEAT_1;
- #endif
- #if LAYER_COUNT > 2
- v_texCoordLayer2 = a_texCoord0 * TEXTURE_REPEAT_2;
- #endif
- }
|