#include "../graphics.c" f64 view_x = 0.; f64 view_y = 0.; f64 view_s = 1.; f64 cx = -.771; f64 cy = .1005; f64 radius = 2.; i64 limit = 1024; i64 time_0; void update_and_render_frame(void) { i32 num_events = p_handle_events(); i64 time_elapsed = p_time() - time_0; time_0 += time_elapsed; b8 left = g_platform.key_down[KEY_LEFT]; b8 right = g_platform.key_down[KEY_RIGHT]; b8 up = g_platform.key_down[KEY_UP]; b8 down = g_platform.key_down[KEY_DOWN]; if (!left && !right && !up && !down && num_events == 0) { p_sleep_for(1); return; } if (g_platform.key_pressed[KEY_ESCAPE]) { view_x = 0.; view_y = 0.; view_s = 1.; } f64 d = (g_platform.key_down[MOD_CTRL] ? .00005 : .001) * view_s * time_elapsed; if (left) { cx -= d; cy -= d; } if (right) { cx += d; cy += d; } if (up) { cx += d; cy -= d; } if (down) { cx -= d; cy += d; } if (g_platform.key_down[BUTTON_LEFT]) { view_x += g_platform.cursor_dx * view_s; view_y += g_platform.cursor_dy * view_s; } if (g_platform.wheel_dy != 0.) { f64 dx = (g_platform.cursor_x * 1. - g_platform.real_width * .5); f64 dy = (g_platform.cursor_y * 1. - g_platform.real_height * .5); view_x -= view_s * dx; view_y -= view_s * dy; view_s += view_s * g_platform.wheel_dy * .1; view_x += view_s * dx; view_y += view_s * dy; } for (i32 j = 0; j < g_platform.frame_height; ++j) for (i32 i = 0; i < g_platform.frame_width; ++i) { f64 kx = ((f64) g_platform.real_width) / g_platform.frame_width; f64 ky = ((f64) g_platform.real_height) / g_platform.frame_height; f64 x = .003 * ((i - (g_platform.frame_width - 1) * .5) * kx * view_s - view_x); f64 y = .003 * ((j - (g_platform.frame_height - 1) * .5) * ky * view_s - view_y); i64 n = 0; for (; x * x + y * y < radius * radius && n < limit; ++n) { f64 z = x * x - y * y; y = 2. * x * y + cy; x = z + cx; } u32 c; if (n == limit) c = 0; else c = 0xffffff - n * 8 - n * 256 * 4; g_platform.pixels[j * g_platform.frame_width + i] = vec4_from_vec3_f32(rgb_f32_from_u32(c), 1.f); } p_render_frame(); } i32 main(i32 argc, c8 **argv) { (void) argc; (void) argv; g_platform = (Platform) { .title = "Julia Set", }; time_0 = p_time(); p_event_loop(); return 0; }