|
- #ifdef OPENGL_ES
- #ifdef GL_FRAGMENT_PRECISION_HIGH
- precision highp float;
- #else
- precision mediump float;
- #endif
- #endif
-
- #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
-
- ///////////////////////////////////////////////////////////
- // Uniforms
- uniform vec3 u_ambientColor;
-
- #if defined(LIGHTING)
-
- #if (DIRECTIONAL_LIGHT_COUNT > 0)
- uniform vec3 u_directionalLightColor[DIRECTIONAL_LIGHT_COUNT];
- uniform vec3 u_directionalLightDirection[DIRECTIONAL_LIGHT_COUNT];
- #endif
-
- #if (POINT_LIGHT_COUNT > 0)
- uniform vec3 u_pointLightColor[POINT_LIGHT_COUNT];
- uniform vec3 u_pointLightPosition[POINT_LIGHT_COUNT];
- uniform float u_pointLightRangeInverse[POINT_LIGHT_COUNT];
- #endif
-
- #if (SPOT_LIGHT_COUNT > 0)
- uniform vec3 u_spotLightColor[SPOT_LIGHT_COUNT];
- uniform vec3 u_spotLightDirection[SPOT_LIGHT_COUNT];
- uniform float u_spotLightRangeInverse[SPOT_LIGHT_COUNT];
- uniform float u_spotLightInnerAngleCos[SPOT_LIGHT_COUNT];
- uniform float u_spotLightOuterAngleCos[SPOT_LIGHT_COUNT];
- #endif
-
- #if defined (NORMAL_MAP)
- uniform sampler2D u_normalMap;
- uniform mat4 u_normalMatrix;
- #endif
-
- #endif
-
- #if defined(DEBUG_PATCHES)
- uniform float u_row;
- uniform float u_column;
- #endif
-
- #if (LAYER_COUNT > 0)
- uniform sampler2D u_surfaceLayerMaps[SAMPLER_COUNT];
- #endif
-
- ///////////////////////////////////////////////////////////
- // Variables
- vec4 _baseColor;
-
- ///////////////////////////////////////////////////////////
- // Varyings
- #if defined(LIGHTING)
- #if !defined(NORMAL_MAP)
- varying vec3 v_normalVector;
- #else
- vec3 v_normalVector;
- #endif
- #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
- #if (LAYER_COUNT > 1)
- void blendLayer(sampler2D textureMap, vec2 texCoord, float alphaBlend)
- {
- vec3 diffuse = texture2D(textureMap, mod(texCoord, vec2(1,1))).rgb;
- _baseColor.rgb = _baseColor.rgb * (1.0 - alphaBlend) + diffuse * alphaBlend;
- }
- #endif
-
- #if defined(LIGHTING)
- #include "lighting.frag"
- #endif
-
-
- void main()
- {
- #if (LAYER_COUNT > 0)
- // Sample base texture
- _baseColor.rgb = texture2D(u_surfaceLayerMaps[TEXTURE_INDEX_0], mod(v_texCoordLayer0, vec2(1,1))).rgb;
- _baseColor.a = 1.0;
- #else
- // If no layers are defined, simply use a white color
- _baseColor = vec4(1, 1, 1, 1);
- #endif
-
- #if (LAYER_COUNT > 1)
- blendLayer(u_surfaceLayerMaps[TEXTURE_INDEX_1], v_texCoordLayer1, texture2D(u_surfaceLayerMaps[BLEND_INDEX_1], v_texCoord0)[BLEND_CHANNEL_1]);
- #endif
- #if (LAYER_COUNT > 2)
- blendLayer(u_surfaceLayerMaps[TEXTURE_INDEX_2], v_texCoordLayer2, texture2D(u_surfaceLayerMaps[BLEND_INDEX_2], v_texCoord0)[BLEND_CHANNEL_2]);
- #endif
-
- #if defined(DEBUG_PATCHES)
- float tint = mod(u_row + mod(u_column, 2.0), 2.0);
- _baseColor.rgb = _baseColor.rgb * 0.75 + vec3(1.0-tint, tint, 0) * 0.25;
- #endif
-
- #if defined(LIGHTING)
-
- #if defined(NORMAL_MAP)
- v_normalVector = texture2D(u_normalMap, v_texCoord0).xyz * 2.0 - 1.0;
- v_normalVector = (u_normalMatrix * vec4(v_normalVector.x, v_normalVector.y, v_normalVector.z, 0)).xyz;
- #endif
-
- gl_FragColor.a = _baseColor.a;
- gl_FragColor.rgb = getLitPixel();
-
- #else
-
- gl_FragColor.rgb = _baseColor.rgb;
-
- #endif
- }
|