*FLOAT 64
MODE 8
OFF
INSTALL @lib$ + "GFXLIB2"
PROCInitGFXLIB
*REFRESH OFF
SYS GFXLIB_Clr%, dispVars{}, FNrgb( 40, 70, 160 )
FOR r = 1 TO 3
FOR theta = 0.0 TO 2.0*PI STEP 0.005
T% = TIME
x = 320 + 75*r*SIN(theta)
y = 256 + 75*r*COS(theta)
SYS GFXLIB_PlotPixel%, dispVars{}, x, y, &FFFFFF
NEXT theta
NEXT r
PROCdisplay
REPEAT UNTIL INKEY-99 OR INKEY(1)=0
SOUND 1, -10, 230, 1
REM. Now draw the three circles using subpixel plotting
SYS GFXLIB_Clr%, dispVars{}, FNrgb( 40, 70, 160 )
FOR r = 1 TO 3
FOR theta = 0.0 TO 2.0*PI STEP 0.005
T% = TIME
x = 320 + 75*r*SIN(theta)
y = 256 + 75*r*COS(theta)
PROC_PlotSubPixel( dispVars.bmBuffAddr%, 640, 512, x, y, &FFFFFF )
NEXT theta
NEXT r
PROCdisplay
OSCLI "REFRESH ON" : ON : REPEAT UNTIL INKEY(1)=0
END
:
:
:
:
DEF PROC_PlotSubPixel( pBuffer%, bW%, bH%, x, y, colour% )
LOCAL x%, y%, i
x% = INTx
y% = INTy
IF (x - x%) = 0 AND (y - y%) = 0 THEN
PROC_putBlendedPixel( pBuffer%, bW%, bH%, x%, y%, colour%, 1.0*&10000 )
ENDPROC
ENDIF
REM. 2x2 square
REM. bottom-left square
i = (x%+1 - x)*(y%+1 - y)
IF i > 0 THEN
PROC_putBlendedPixel( pBuffer%, bW%, bH%, x%, y%, colour%, i*&10000 )
ENDIF
REM. bottom-right square
i = ((x+1) - (x%+1))*(y%+1 - y)
IF i > 0 THEN
PROC_putBlendedPixel( pBuffer%, bW%, bH%, x%+1, y%, colour%, i*&10000 )
ENDIF
REM. top-left square
i = (x%+1 - x)*((y+1) - (y%+1))
IF i > 0 THEN
PROC_putBlendedPixel( pBuffer%, bW%, bH%, x%, y%+1, colour%, i*&10000 )
ENDIF
REM. top-right square
i = ((x+1) - (x%+1))*((y+1) - (y%+1))
IF i > 0 THEN
PROC_putBlendedPixel( pBuffer%, bW%, bH%, x%+1, y%+1, colour%, i*&10000 )
ENDIF
ENDPROC
:
:
:
:
DEF PROC_putBlendedPixel( pBuffer%, bW%, bH%, x%, y%, colour%, i% )
LOCAL p%
IF x% < 0 OR x% >= bW% THEN ENDPROC
IF y% < 0 OR y% >= bH% THEN ENDPROC
p% = pBuffer% + 4*(bW%*y% + x%)
!p% = FN_blendPixel( !p%, colour%, i% )
ENDPROC
:
:
:
:
DEF FN_blendPixel( bg%, fg%, i% )
LOCAL pFg%, pBg%, r_fg%, g_fg%, b_fg%, r_bg%, g_bg%, b_bg%, r%, g%, b%
pFg% = ^fg%
pBg% = ^bg%
r_fg% = pFg%?2
r_bg% = pBg%?2
r% = r_bg% + (i%*(r_fg% - r_bg%) >> 16)
g_fg% = pFg%?1
g_bg% = pBg%?1
g% = g_bg% + (i%*(g_fg% - g_bg%) >> 16)
b_fg% = ?pFg%
b_bg% = ?pBg%
b% = b_bg% + (i%*(b_fg% - b_bg%) >> 16)
= r%*&10000 + g%*&100 + b% DEF PROC_line( x1#, y1#, x2#, y2#, C% )
LOCAL dx#, dy#, len#, step#, r#
dx# = x2# - x1#
dy# = y2# - y1#
len# = SQR( dx#^2 + dy#^2 )
step# = 1.0 / len#
FOR r# = 0.0 TO 1.0 STEP step#
table{(N%)}.x# = x1# + r#*dx#
table{(N%)}.y# = y1# + r#*dy#
table{(N%)}.col% = C%
N%+=1
NEXT
ENDPROC