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