#version 430 core in vec2 vTex; in vec4 vColor; out vec4 fragColor; uniform sampler2D uParticleTexture; uniform bool uUseTexture; void main() { vec4 texel; if (uUseTexture) { texel = texture(uParticleTexture, vTex); } else { vec2 d = vTex - vec2(0.5, 0.5); float r = length(d) * 2.0; float falloff = smoothstep(1.0, 0.4, r); texel = vec4(1.0, 1.0, 1.0, falloff); } vec4 color = texel * vColor; if (color.a < 0.02) discard; fragColor = color; }