import type { ImageDocument } from "@core/document"; import type { EditorState } from "@editor/state"; export type RenderFrame = { document: ImageDocument; editor: EditorState; }; export type ImageRenderer = { render(frame: RenderFrame): void; resize(width: number, height: number): void; dispose(): void; }; export type RendererBackend = "webgl"; export function createRenderer(canvas: HTMLCanvasElement, backend: RendererBackend = "webgl"): ImageRenderer { if (backend !== "webgl") { throw new Error(`Unsupported renderer backend: ${backend}`); } const context = canvas.getContext("webgl2"); if (!context) { throw new Error("WebGL2 is not available"); } return { render() { context.viewport(0, 0, canvas.width, canvas.height); context.clearColor(0, 0, 0, 0); context.clear(context.COLOR_BUFFER_BIT); }, resize(width, height) { canvas.width = width; canvas.height = height; context.viewport(0, 0, width, height); }, dispose() {}, }; }