|
|
@ -11,7 +11,9 @@ extern "C" |
|
|
|
#[no_mangle]
|
|
|
|
fn console_log(_: *const u8, _: usize);
|
|
|
|
#[no_mangle]
|
|
|
|
fn extern_paint(ptr: *const u8, w: usize, h: usize);
|
|
|
|
fn extern_init_buffer(ptr: *const u8, w: usize, h: usize);
|
|
|
|
#[no_mangle]
|
|
|
|
fn extern_paint();
|
|
|
|
}
|
|
|
|
|
|
|
|
fn log(string: &str)
|
|
|
@ -23,9 +25,14 @@ fn log(string: &str) |
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
fn paint(buffer: &[u8], w: usize, h: usize)
|
|
|
|
fn init_buffer(buffer: &[u8], w: usize, h: usize)
|
|
|
|
{
|
|
|
|
unsafe { extern_init_buffer(buffer.as_ptr(), w, h); }
|
|
|
|
}
|
|
|
|
|
|
|
|
fn paint()
|
|
|
|
{
|
|
|
|
unsafe { extern_paint(buffer.as_ptr(), w, h); }
|
|
|
|
unsafe { extern_paint(); }
|
|
|
|
}
|
|
|
|
|
|
|
|
#[no_mangle]
|
|
|
@ -35,18 +42,32 @@ pub extern "C" fn entrypoint() |
|
|
|
}
|
|
|
|
|
|
|
|
#[no_mangle]
|
|
|
|
pub extern "C" fn paint_red(w: usize, h: usize)
|
|
|
|
pub extern "C" fn paint_red(w: usize, h: usize, ts: f64)
|
|
|
|
{
|
|
|
|
fn smooth_convert(v: f64, step: f64) -> u8 |
|
|
|
{
|
|
|
|
if 256.0 - v < step
|
|
|
|
{
|
|
|
|
return ((256.0 - v) / step * 255.0) as u8;
|
|
|
|
} else
|
|
|
|
{
|
|
|
|
return (v * 255.0 / (256.0 - step)) as u8;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
let t = (ts / 50.0).rem_euclid(256.0);
|
|
|
|
let mut buffer = vec![0; 4 * w * h];
|
|
|
|
let mut c: (u8, u8, u8) = (0, 0, 0);
|
|
|
|
init_buffer(&buffer, w, h);
|
|
|
|
let mut c: (f64, f64, f64) = (t, t, t);
|
|
|
|
let step = (1.0, 254.0, 2.0);
|
|
|
|
for ii in 0 .. w * h
|
|
|
|
{
|
|
|
|
buffer[4 * ii] = c.0;
|
|
|
|
buffer[4 * ii + 1] = c.1;
|
|
|
|
buffer[4 * ii + 2] = c.2;
|
|
|
|
buffer[4 * ii] = smooth_convert(c.0, step.0);
|
|
|
|
buffer[4 * ii + 1] = smooth_convert(c.1, step.1);
|
|
|
|
buffer[4 * ii + 2] = smooth_convert(c.2, step.2);
|
|
|
|
buffer[4 * ii + 3] = 255;
|
|
|
|
c = (c.0.wrapping_add(1), c.1.wrapping_add(254), c.2.wrapping_add(2));
|
|
|
|
c = (c.0 + step.0, c.1 + step.1, c.2 + step.2);
|
|
|
|
c = (c.0.rem_euclid(256.0), c.1.rem_euclid(256.0), c.2.rem_euclid(256.0));
|
|
|
|
}
|
|
|
|
paint(&buffer, w, h);
|
|
|
|
paint();
|
|
|
|
}
|
|
|
|
|