blob: 309316a002000df1cd259092353490ef19d85ae0 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
vertices' = [V3 i 0.0 0.0 | i <- [(-5.0)..5.0] ]
lineVertexStream = fetchArrays Line $ concat [[v1, v2] | (v1, v2) <- pairs vertices']
clear = FrameBuffer $ (DepthImage @1 1000, ColorImage @1 white) -- ...
lines = LineCtx 1.0 LastVertex
colorFragmentCtx = accumulationContext (DepthOp Less True, ColorOp NoBlending (V4 True True True True))
m = Uniform "Mouse" :: Vec 2 Float
rasterizeWith = rasterizePrimitives
mapFragments2 s fs = accumulate colorFragmentCtx ( \a -> fs a) s clear
transform s f = mapPrimitives (\(p) -> let v = v3FToV4F p in (f v, v)) s
trans :: Vec 4 Float -> Vec 4 Float
trans (V4 i' _ _ _) = V4 (j *! sin i) (j *! cos i) (m%y *! i) 1.0
where i = 0.9 *! i'
j = exp ((m%x -! 0.5) *! i')
rotate' v = (Uniform "MVP" :: Mat 4 4 Float) *. v
main = lineVertexStream -- cube vertices
`transform` ((scale 0.5 . rotate') . trans) -- scale them
& rasterizeWith lines Smooth -- rasterize
`mapFragments2` id
& ScreenOut -- draw into screen
|