|
|
|
|
@ -1,10 +1,12 @@
|
|
|
|
|
#version 410 core
|
|
|
|
|
#define M_PI 3.1415926535897932384626433832795
|
|
|
|
|
#define M_LIGHTLIM 50
|
|
|
|
|
//SpriteBatch will use texture unit 0
|
|
|
|
|
uniform sampler2D u_texture;
|
|
|
|
|
uniform vec2 u_screenResolution;
|
|
|
|
|
uniform vec2 u_lightCoord[50];
|
|
|
|
|
uniform float u_lightIntensity[50];
|
|
|
|
|
uniform vec2 u_lightCoord[M_LIGHTLIM];
|
|
|
|
|
uniform float u_lightIntensity[M_LIGHTLIM];
|
|
|
|
|
uniform vec3 u_lightColor[M_LIGHTLIM];
|
|
|
|
|
uniform int u_actualLights;
|
|
|
|
|
uniform float u_ambientLight;
|
|
|
|
|
|
|
|
|
|
@ -32,18 +34,26 @@ void main() {
|
|
|
|
|
|
|
|
|
|
//Distance is measured in pixels
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vec3 finalTint = vec3(1,1,1);
|
|
|
|
|
float brightest = u_ambientLight;
|
|
|
|
|
for(int i = 0;i < u_actualLights;i++){
|
|
|
|
|
float dis2Light = getDistance(gl_FragCoord.x, gl_FragCoord.y, u_lightCoord[i].x, u_lightCoord[i].y);
|
|
|
|
|
float dis2Light2 = (1-(min(dis2Light/(disFull * u_lightIntensity[i]), 1)));
|
|
|
|
|
brightest = brightest + dis2Light2 - brightest * dis2Light2;
|
|
|
|
|
finalTint.rgb = finalTint.rgb + (u_lightColor[i].rgb - finalTint.rgb) * dis2Light2;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//Apply Light Levels
|
|
|
|
|
texColor.rgb = texColor.rgb * (sin(pow(brightest, 10) * M_PI / 2));
|
|
|
|
|
|
|
|
|
|
//apply torchlight tint
|
|
|
|
|
texColor.b = texColor.b * 0.7;
|
|
|
|
|
texColor.g = texColor.g * 0.9;
|
|
|
|
|
|
|
|
|
|
texColor.rgb = texColor.rgb * finalTint.rgb;
|
|
|
|
|
|
|
|
|
|
//final color
|
|
|
|
|
gl_FragColor = texColor * vColor;
|
|
|
|
|
}
|
|
|
|
|
|