diff --git a/shader/lightmapCircle.frag b/shader/lightmapCircle.frag index c29090cf5..7a6466b7e 100644 --- a/shader/lightmapCircle.frag +++ b/shader/lightmapCircle.frag @@ -1,12 +1,13 @@ #version 430 core in vec2 cenPosT; -in vec2 gParams; +in float lum; + +in vec2 dField; + out vec4 fColor; void main() { - vec2 pos = gl_FragCoord.xy; - float dist = min(1 , 2*distance(pos,cenPosT) / (gParams.x)); - float c = gParams.y * pow(1-dist,2); + float c = pow (1 - min(1, dot(dField,dField)) , 2) * lum ; fColor = vec4(c,c,c,c); } diff --git a/shader/lightmapCircle.geom b/shader/lightmapCircle.geom index a32186b49..a8790706a 100644 --- a/shader/lightmapCircle.geom +++ b/shader/lightmapCircle.geom @@ -2,26 +2,31 @@ layout (points) in; layout (triangle_strip, max_vertices = 4) out; in vec2 vParams []; -out vec2 gParams; +out float lum; out vec2 cenPosT; +out vec2 dField; uniform vec2 winSize; uniform float zoom; void main() { + lum = vParams[0].y; vec3 cenPos = gl_in[0].gl_Position.xyz; - gParams = vec2( vParams[0].x * zoom * 2, vParams[0].y); - float gRad = gParams.x; + float gRad = vParams[0].x * zoom * 2; cenPosT = vec2 ( (cenPos.x + 1) * 0.5 * winSize.x , (cenPos.y + 1) * 0.5 * winSize.y); + dField = vec2 ( 1, 1); gl_Position = vec4 (cenPos.x + gRad/winSize.x, cenPos.y + gRad/winSize.y, -0.2 , 1); EmitVertex(); + dField = vec2 (-1, 1); gl_Position = vec4 (cenPos.x - gRad/winSize.x, cenPos.y + gRad/winSize.y, -0.2 , 1); EmitVertex(); + dField = vec2 ( 1,-1); gl_Position = vec4 (cenPos.x + gRad/winSize.x, cenPos.y - gRad/winSize.y, -0.2 , 1); EmitVertex(); + dField = vec2 (-1,-1); gl_Position = vec4 (cenPos.x - gRad/winSize.x, cenPos.y - gRad/winSize.y, -0.2 , 1); EmitVertex();