You could probably just draw a regular quad and texture it with a png with transparency fading towards the edges, and solid down the middle. Any quad drawn with this png would appear to be glowing on a dark background.
To figure out how to draw a line quad, check out this code I did a year or so ago (forum link was broken?).
It is a quick demo that bounces two connected polyvector lines around the screen.
You would just need to texture them properly to make them glow.
I'm not sure if this is the best method, but it would work if converted to OpenGL I think.
TYPE TPoint
x%
y%
FUNCTION Set: x%, y%
self.x = x
self.y = y
ENDFUNCTION
ENDTYPE
TYPE TLine
p1 AS TPoint
p2 AS TPoint
width# = -1
colour% = -1
p1a AS TPoint
p1b AS TPoint
p2a AS TPoint
p2b AS TPoint
FUNCTION Set: x1,y1, x2,y2, width#=-1, colour%=-1
self.p1.Set(x1, y1)
self.p2.Set(x2, y2)
IF width <0 THEN width = self.width
IF width <=0 THEN width = 4
IF colour=-1 THEN colour = self.colour
IF colour=-1 THEN colour = RGB(255,255,255)
self.width = width
self.colour = colour
self.Update()
ENDFUNCTION
FUNCTION Update:
LOCAL angle#
LOCAL width#
LOCAL dx, dy
dx = self.p2.x - self.p1.x
dy = self.p2.y - self.p1.y
width = self.width / 2.0
angle = 90 - ATAN(dy, dx)
self.p1a.Set(self.p1.x - COS(angle) * width, self.p1.y + SIN(angle) * width)
self.p1b.Set(self.p1.x + COS(angle) * width, self.p1.y - SIN(angle) * width)
self.p2a.Set(self.p2.x - COS(angle) * width, self.p2.y + SIN(angle) * width)
self.p2b.Set(self.p2.x + COS(angle) * width, self.p2.y - SIN(angle) * width)
ENDFUNCTION
FUNCTION Draw:
STARTPOLY 0
POLYVECTOR self.p1a.x, self.p1a.y, 0, 0, self.colour
POLYVECTOR self.p1b.x, self.p1b.y, 0, 0, self.colour
POLYVECTOR self.p2b.x, self.p2b.y, 0, 0, self.colour
POLYVECTOR self.p2a.x, self.p2a.y, 0, 0, self.colour
ENDPOLY
// Uncomment to show original line in white
//DRAWLINE self.p1.x, self.p1.y, self.p2.x, self.p2.y, RGB(255,255,255)
ENDFUNCTION
ENDTYPE
ALLOWESCAPE TRUE
LOCAL p1 AS TPoint
LOCAL p2 AS TPoint
LOCAL p3 AS TPoint
LOCAL d1 AS TPoint
LOCAL d2 AS TPoint
LOCAL d3 AS TPoint
LOCAL width% = 12
LOCAL screen AS TPoint
LOCAL line1 AS TLine
LOCAL line2 AS TLine
GETSCREENSIZE screen.x, screen.y
p1.Set( 30, 40) // point 1 x,y
p2.Set(333,222) // point 2 x,y
p3.Set(221,113) // point 3 x,y
d1.Set( -3, -2) // point 1 bounce x,y speed
d3.Set( 1, 1) // point 2 bounce x,y speed
d2.Set( 3, 5) // point 2 bounce x,y speed
line1.Set(p1.x,p1.y, p2.x,p2.y, width, RGB(250,75,0))
line2.Set(p2.x,p2.y, p3.x,p3.y, width, RGB(250,75,0))
REPEAT
INC p1.x, d1.x; IF (p1.x > screen.x) OR (p1.x<1) THEN d1.x = -d1.x
INC p1.y, d1.y; IF (p1.y > screen.y) OR (p1.y<1) THEN d1.y = -d1.y
INC p2.x, d2.x; IF (p2.x > screen.x) OR (p2.x<1) THEN d2.x = -d2.x
INC p2.y, d2.y; IF (p2.y > screen.y) OR (p2.y<1) THEN d2.y = -d2.y
INC p3.x, d3.x; IF (p3.x > screen.x) OR (p3.x<1) THEN d3.x = -d3.x
INC p3.y, d3.y; IF (p3.y > screen.y) OR (p3.y<1) THEN d3.y = -d3.y
line1.Set(p1.x,p1.y, p2.x,p2.y)
line2.Set(p2.x,p2.y, p3.x,p3.y)
line2.Draw()
line1.Draw()
SHOWSCREEN
UNTIL FALSE