v2 / examples / wasm / mandelbrot / mandelbrot.wasm.v
44 lines · 37 sloc · 801 bytes · a80bc2331450fc28c900097f8afafe173f161d27
Raw
1// vtest build: false // requires special compilation flags: `-b wasm -os browser`
2fn JS.canvas_x() int
3fn JS.canvas_y() int
4fn JS.setpixel(x int, y int, c f64)
5
6// `main` must be public!
7pub fn main() {
8 println('starting main.main...')
9
10 max_x := JS.canvas_x()
11 max_y := JS.canvas_y()
12 middle_x := max_x / 2
13 middle_y := max_y / 2
14
15 mut y := 0
16 for y < max_y {
17 y += 1
18 mut x := 0
19 for x < max_x {
20 x += 1
21
22 e := (f64(y) / middle_y) - 1.5
23 f := (f64(x) / middle_x) - 1.0
24
25 mut a := 0.0
26 mut b := 0.0
27 mut i := 0.0
28 mut j := 0.0
29 mut c := 0.0
30
31 for i * i + j * j < 4 && c < 255 {
32 i = a * a - b * b + e
33 j = 2 * a * b + f
34 a = i
35 b = j
36 c += 1
37 }
38
39 JS.setpixel(x, y, c)
40 }
41 }
42 // TODO: remove the need for panic here:
43 panic('reached the end of main.main')
44}
45