INCLUDE "hug.bac", INIT, HUGOPTIONS, WINDOW, CANVAS, ATTACH, TIMEOUT, DISPLAY, PIXEL, DRAW, SYNC
INIT
HUGOPTIONS("CANVAS GL")
HUGOPTIONS("GL_FREEZE 1")
HUGOPTIONS("NOSCALING")
CONST x_size = 400
CONST y_size = 400
DECLARE cols[3][256]
FUNCTION Draw_Plasma
LOCAL x, y TYPE float
LOCAL c, r, g, b
DRAW(canvas)
FOR y = 1 TO y_size
FOR x = 1 TO x_size
c = FLOOR(SIN(x/35)*128 + SIN(y/28)*32 + SIN((x+y)/16)*64) & 255
r = cols[0][c] & 255
g = cols[1][c] & 255
b = cols[2][c] & 255
IF r < 16 THEN red$ = CONCAT$("0", HEX$(r))
ELSE red$ = HEX$(r)
IF g < 16 THEN green$ = CONCAT$("0", HEX$(g))
ELSE green$ = HEX$(g)
IF b < 16 THEN blue$ = CONCAT$("0", HEX$(b))
ELSE blue$ = HEX$(b)
PIXEL(CONCAT$("#", red$, green$, blue$), x, y)
NEXT
NEXT
SYNC
RETURN FALSE
END FUNCTION
FOR i = 0 TO 255
cols[0][i] = ABS(128 - 127 * SIN(i * PI / 32))
cols[1][i] = ABS(128 - 127 * SIN(i * PI/ 64))
cols[2][i] = ABS(128 - 127 * SIN(i * PI / 128))
NEXT
win = WINDOW("Plasma Demo with HUG", x_size, y_size)
canvas = CANVAS(x_size, y_size)
ATTACH(win, canvas, 0, 0)
TIMEOUT(50, Draw_Plasma)
DISPLAY