(Click on thumbnails below to get a full sized view of the thumbnail images shown)
I'm on a mission of sorts and that mission is glowy lines!

Here is a screenshot from a Geography wars clone that uses the effect I'm trying to get.



I think I'm close, but I'm not quite there yet. Here is a screenshot of what I've got so far...



The core of my lines need to be white-er and the glow fade out a bit more. Then I'll have the visual appeal that I'm looking for. Now that you know what I'm trying to achieve, I'll explain what I'm doing in OpenGL.

My approach is as follows...

I'm using a small 32x32 (32-bit + alpha channel) texture to represent a glowy pixel. I'm then drawing that pixel, scaled down to size, for each point on the line I am drawing. Here is my exact texture I use.




Here is my code for the function...

Code:
procedure DrawGlowLine(X1, Y1, X2, Y2: Integer; ColorR, ColorG, ColorB: GLfloat; GlowTexture: TTexture);
var
 dx, dy, sdx, sdy, x, y, px, py : Integer;
procedure DrawDot;
begin
   DrawTintedParticle(px, py, 0,
            0.8, 0.075, // scale, alpha
            0, 32, ColorR, ColorG, ColorB, GlowTexture);
   DrawTintedParticle(px, py, 0,
            0.3, 0.3, // scale, alpha
            0, 32, ColorR, ColorG, ColorB, GlowTexture);
   DrawTintedParticle(px, py, 0,
            0.125, 0.9, // scale, alpha
            0, 32, (ColorR+2)/3, (ColorG+2)/3, (ColorB+2)/3, GlowTexture);
end;
begin
   dx := X2 - X1;
   dy := Y2 - Y1;
   if (dx < 0) then sdx := -1 else sdx := 1;
   if (dy < 0) then sdy := -1 else sdy := 1;
   dx := sdx * dx + 1;
   dy := sdy * dy + 1;
   x := 0;
   y := 0;
   px := x1;
   py := y1;
   if (dx >= dy) then
   begin
     for x := 0 to dx - 1 do
     begin
        DrawDot;

        y := y + dy;
        if (y >= dx) then
        begin
          y := y - dx;
          py := py + sdy;
        end;
        px := px + sdx;
     end;
   end
   else
   begin
     for y := 0 to dy - 1 do
     begin
        DrawDot;

        x := x + dx;
        if (x >= dy) then
        begin
          x := x - dy;
          px := px + sdx;
        end;
        py := py + sdy;
     end;
   end;
end;
Not very complicated, just a line drawing function substituting the pixel for the small glow texture. I draw the texture 3 times.

1) big colored fade for that glow effect
2) for more solid coloring
3) the core where it's a bit whiter to give it that neon-type effect

Now this effect as I've represented it, is not that bad, but it has 2 main flaws.

1) It's SLOW... If I drew many things on the screen, it would slow down my game on older hardware. In fact drawing these few lines even slowed down my simple tron clone running, on-screen, in the background.

2) Resizability; if I wanted to make the lines thicker, or even draw a shape that had was thicker than a single 'pixel' wide (ie my tron/snake guys you see one screen), it might not look as decent as it does my lines because of my raw calculations for scale and alpha + color scaling. (the part where I add 2 and divide by 3 to bias the color towards white)

Any ideas on how I can capture the original effect better? I'm willing to abandon the while DrawGlowLine procedure if there is a better, easier, faster approach.