55 lines
1.5 KiB
Plaintext
55 lines
1.5 KiB
Plaintext
PROCdrawAntiAliasedLine(100, 100, 600, 400, 0, 0, 0)
|
|
END
|
|
|
|
DEF PROCdrawAntiAliasedLine(x1, y1, x2, y2, r%, g%, b%)
|
|
LOCAL dx, dy, xend, yend, grad, yf, xgap, ix1%, iy1%, ix2%, iy2%, x%
|
|
|
|
dx = x2 - x1
|
|
dy = y2 - y1
|
|
IF ABS(dx) < ABS(dy) THEN
|
|
SWAP x1, y1
|
|
SWAP x2, y2
|
|
SWAP dx, dy
|
|
ENDIF
|
|
|
|
IF x2 < x1 THEN
|
|
SWAP x1, x2
|
|
SWAP y1, y2
|
|
ENDIF
|
|
|
|
grad = dy / dx
|
|
|
|
xend = INT(x1 + 0.5)
|
|
yend = y1 + grad * (xend - x1)
|
|
xgap = xend + 0.5 - x1
|
|
ix1% = xend
|
|
iy1% = INT(yend)
|
|
PROCplot(ix1%, iy1%, r%, b%, g%, (INT(yend) + 1 - yend) * xgap)
|
|
PROCplot(ix1%, iy1% + 1, r%, b%, g%, (yend - INT(yend)) * xgap)
|
|
yf = yend + grad
|
|
|
|
xend = INT(x2 + 0.5)
|
|
yend = y2 + grad * (xend - x2)
|
|
xgap = x2 + 0.5 - xend
|
|
ix2% = xend
|
|
iy2% = INT(yend)
|
|
PROCplot(ix2%, iy2%, r%, b%, g%, (INT(yend) + 1 - yend) * xgap)
|
|
PROCplot(ix2%, iy2% + 1, r%, b%, g%, (yend - INT(yend)) * xgap)
|
|
|
|
FOR x% = ix1% + 1 TO ix2% - 1
|
|
PROCplot(x%, INT(yf), r%, b%, g%, INT(yf) + 1 - yf)
|
|
PROCplot(x%, INT(yf) + 1, r%, b%, g%, yf - INT(yf))
|
|
yf += grad
|
|
NEXT
|
|
ENDPROC
|
|
|
|
DEF PROCplot(X%, Y%, R%, G%, B%, a)
|
|
LOCAL C%
|
|
C% = TINT(X%*2,Y%*2)
|
|
COLOUR 1, R%*a + (C% AND 255)*(1-a), \
|
|
\ G%*a + (C% >> 8 AND 255)*(1-a), \
|
|
\ B%*a + (C% >> 16 AND 255)*(1-a)
|
|
GCOL 1
|
|
LINE X%*2, Y%*2, X%*2, Y%*2
|
|
ENDPROC
|