import Data.Array.Accelerate as A
import Data.Array.Accelerate.Interpreter
import Data.Array.Accelerate.IO
import Data.Array.Accelerate.Data.Colour.RGB
import Data.Array.Accelerate.Data.Colour.Names
zoom :: Int
zoom = 25
test :: Acc (Array DIM2 (RGB Word8))
test = A.generate (constant (Z :. 19*zoom :. 12*zoom)) go
where
go :: Exp DIM2 -> Exp (RGB Word8)
go ix =
let Z :. y :. x = unlift ix
j = y `div` constant zoom
i = x `div` constant zoom
in
-- by row
j ==* 0 ? ( constant black
, j ==* 3 ? ( constant magenta
, j ==* 6 ? ( constant cyan
, j ==* 9 ? ( constant yellow
, j ==* 12 ? ( constant blue
, j ==* 15 ? ( constant red
, j ==* 18 ? ( constant white
-- otherwise by column
, i <=* 1 ? ( constant red
, i <=* 3 ? ( constant green
, i <=* 5 ? ( constant blue
, i <=* 7 ? ( constant yellow
, i <=* 9 ? ( constant cyan
, i <=* 11 ? ( constant magenta
, {- otherwise -} constant black )))))))))))))
main :: IO ()
main
= writeImageToBMP "blocks.bmp"
$ run (A.map packRGB8 test)