Crates.io | gc_nes_web |
lib.rs | gc_nes_web |
version | 0.1.5 |
source | src |
created_at | 2020-05-29 02:08:34.324969 |
updated_at | 2020-05-31 21:35:07.100014 |
description | WASM wrapper for my gc_nes_core crate. |
homepage | https://garettcooper.com/#/nes-emulator |
repository | https://github.com/GarettCooper/gc_nes_emulator |
max_upload_size | |
id | 247231 |
size | 9,337 |
gc_nes_web wraps the public functions exposed by my gc_nes_core crate for use in the browser through Web Assembly - Javascript interop. It provides an interface to load and run NES ROMs, provide input, and extract rendered image data. Audio is currently unsupported.
npm install gc_nes_web
// Import the package
const wasm = await import ("gc_nes_web");
// Create the NES object
let nes = this.state.wasm.nes(romArrayOfBytes);
// Run the emulator to the completion of the next frame and retrieve it
let frame = nes.frame();
// Or run just one cycle and get the frame separately
nes.cycle();
let frame = nes.get_screen();
// Drawing to a Canvas
let offscreenCanvas = new OffscreenCanvas(256, 240);
let offscreenCanvasContext = offscreenCanvas.getContext("2d");
let imageData = offscreenCanvasContext?.createImageData(256, 240);
imageData.data.set(frame);
offscreenCanvasContext.putImageData(imageData, 0, 0);
// mainCanvasContext is the 2D context for the Canvas you actually want to draw to.
mainCanvasContext.drawImage(offscreenCanvas, 0, 0);
Through wasm-pack, gc_nes_web has full Typescript support
You can try out gc_nes_emulator on my website, at https://garettcooper.com/#/nes-emulator
Current version: 0.1.5