mugl 0.1.2

Minimalistic Low-level WebGL 2.0 / WebGPU 3D graphics abstraction layer for Rust and WebAssembly
Documentation
import { set_context_memory } from 'mugl/wasm';
import { app_id, memory, init, render, resize, destroy } from 'examples.wasm';

const EXAMPLES = [
  'basic',
  'instancing',
  'stencil',
]

set_context_memory(app_id(), memory);

const canvas = document.querySelector('canvas');
const dpr = window.devicePixelRatio || 1;
if (dpr > 1) {
  const { width, height } = canvas;
  canvas.width = width * dpr;
  canvas.height = height * dpr;
  canvas.style.width = `${width}px`;
  canvas.style.height = `${height}px`;
}

let raf = 0;
function renderLoop(now = 0) {
  raf = requestAnimationFrame(renderLoop);
  if (!render(now / 1000)) {
    cancelAnimationFrame(raf);
    raf = 0;
  }
}

window.loadExample = function (hash = location.hash) {
  const nextExample = EXAMPLES.indexOf(hash.replace('#', ''));
  if (nextExample >= 0) {
    destroy();
    init(nextExample);
    if (!raf) {
      renderLoop();
    }
  }
};

window.loadExample(location.hash = location.hash || `#${EXAMPLES[0]}`);