Cross-platform window management library for Deno.
import {
createWindow,
getProcAddress,
mainloop,
} from "jsr:@gfx/dwm";
import * as gl from "https://deno.land/x/[email protected]/api/gles23.2.ts";
const window = createWindow({
title: "DenoGL",
width: 800,
height: 600,
resizable: true,
glVersion: "v3.2",
gles: true,
});
gl.load(getProcAddress);
addEventListener("resize", (event) => {
gl.Viewport(0, 0, event.width, event.height);
});
gl.ClearColor(0.0, 0.0, 0.0, 1.0);
function frame() {
gl.Clear(gl.COLOR_BUFFER_BIT);
window.swapBuffers();
}
await mainloop(frame);
import {
mainloop,
WindowCanvas,
} from "jsr:@gfx/dwm/ext/canvas";
const canvas = new WindowCanvas({
title: "Skia Canvas",
width: 800,
height: 600,
resizable: true,
});
canvas.onDraw = (ctx) => {
ctx.fillStyle = "black";
ctx.fillRect(0, 0, ctx.canvas.width, ctx.canvas.height);
ctx.fillStyle = "white";
ctx.font = "30px Arial";
ctx.textBaseline = "top";
ctx.fillText("Hello World", 10, 10);
};
await mainloop(() => {
canvas.draw();
});
See examples for more examples!
For drawing, you can use:
- WebGPU (Use
ext/webgpu
for an easy to use wrapper) - Deno Gluten
- Skia Canvas (Use
ext/canvas
for an easy to use wrapper) - Deno Vulkan
Since this module depends on unstable FFI API, you need to pass --unstable
along with --allow-ffi
, --allow-write
and --allow-env
.
deno run --unstable --allow-ffi --allow-write --allow-env <file>
- Dj (@DjDeveloperr)
- Dean Srebnik (@load1n9)
Apache-2.0 licensed.
Copyright 2024 © The Deno Windowing Team