#version 430 layout (location = 0) in vec3 pos; layout (location = 1) in vec2 tex; layout (location = 2) in vec4 vertexColor; uniform sampler2D samp; uniform mat4 viewMatrix; uniform mat4 modelMatrix; uniform vec3 ambientLight; struct Light { vec2 pos; float strength; vec3 color; }; uniform Light lights[32]; uniform bool useTexture; uniform bool useColor; uniform bool useLight; in vec2 tc; in vec2 loc; in vec4 vColor; out vec4 color; vec4 getLight() { vec3 light = vec3(0, 0, 0); for(int i = 0; i < 32; i++) { light += lights[i].color * max(1 - lights[i].strength * length(loc - lights[i].pos), 0); } return vec4(min(light, vec3(1, 1, 1)), 1); } void main(void) { if(useTexture) { color = texture(samp, tc); if(color.a == 0.0) { discard; } if(useColor) { color = vColor; } } else { color = vColor; } if(useLight) { color = pow(pow(color, vec4(1 / 2.2)) * vec4(ambientLight, 1.0) + getLight(), vec4(2.2)); } }