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 29 30 31 32
use js_ffi::*; pub struct HyperPixel { instance:JSValue, fn_init:JSValue, fn_render:JSValue, } impl HyperPixel { pub fn new(selector:&str) -> HyperPixel { let mut h = HyperPixel{ instance: 0.0, fn_init:register("(selector)=>{ return new HyperPixel(document.querySelector(selector)); }"), fn_render:register("(function(mem,ptr,length){ let p = ptr/4; let pixelView = (new Float32Array(mem)).subarray(p,p+length); this.render(pixelView); })"), }; h.init(selector); h } pub fn init(&mut self,selector:&str) { self.instance = call_1(UNDEFINED,self.fn_init,TYPE_STRING, to_js_string(selector)) } pub fn render(&self,colors:&[f32]){ call_3(self.instance,self.fn_render,TYPE_MEMORY, 0.0 as JSValue, TYPE_NUM, colors.as_ptr() as usize as JSValue, TYPE_NUM, colors.len() as f64 as JSValue); } }