Skip to content

Rustとのやりとり #7

@idomshi

Description

@idomshi

Rustで書いたWeb Assemblyからcanvasに表示するデータを持ってくるとき。

// JavaScript
const draw = () => {
    const pixelsPtr = universe.image_pixel_array()
    const pixels = new Uint8ClampedArray(memory.buffer, pixelsPtr, 8 * 8 * 4)
    const imgdata = new ImageData(pixels, 8, 8)
    canvas.width = 8;
    canvas.height = 8;
    ctx.putImageData(imgdata, 0, 0)
}
// Rust
#[wasm_bindgen]
impl Universe {
    pub fn image_pixel_array(&self) -> *const u8 {
        let pixel_array: Vec<u8> = vec![
              0, 255, 255, 255,    0, 255, 255, 255,    0, 255, 255, 255,    0, 255, 255, 255,    0, 255, 255, 255,    0, 255, 255, 255,    0, 255, 255, 255,    0, 255, 255, 255,  
            255, 255, 255, 255,  255, 255, 255, 255,  255, 255, 255, 255,  255, 255, 255, 255,  255, 255, 255, 255,  255, 255, 255, 255,  255, 255, 255, 255,  255, 255, 255, 255,  
              0, 255, 255, 255,    0, 255, 255, 255,    0, 255, 255, 255,    0, 255, 255, 255,    0, 255, 255, 255,    0, 255, 255, 255,    0, 255, 255, 255,    0, 255, 255, 255,  
            255, 255, 255, 255,  255, 255, 255, 255,  255, 255, 255, 255,  255, 255, 255, 255,  255, 255, 255, 255,  255, 255, 255, 255,  255, 255, 255, 255,  255, 255, 255, 255,  
              0, 255, 255, 255,    0, 255, 255, 255,    0, 255, 255, 255,    0, 255, 255, 255,    0, 255, 255, 255,    0, 255, 255, 255,    0, 255, 255, 255,    0, 255, 255, 255,  
            255, 255, 255, 255,  255, 255, 255, 255,  255, 255, 255, 255,  255, 255, 255, 255,  255, 255, 255, 255,  255, 255, 255, 255,  255, 255, 255, 255,  255, 255, 255, 255,  
              0, 255, 255, 255,    0, 255, 255, 255,    0, 255, 255, 255,    0, 255, 255, 255,    0, 255, 255, 255,    0, 255, 255, 255,    0, 255, 255, 255,    0, 255, 255, 255,  
            255, 255, 255, 255,  255, 255, 255, 255,  255, 255, 255, 255,  255, 255, 255, 255,  255, 255, 255, 255,  255, 255, 255, 255,  255, 255, 255, 255,  255, 255, 255, 255 
        ];
        pixel_array.as_ptr()
    }
}

っていう感じでバイナリでやり取りできそう。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions