From 7b06f4e9958562f3df09eecc368e92af013e5b39 Mon Sep 17 00:00:00 2001 From: James Barnett Date: Sat, 26 Jul 2025 14:44:33 +0100 Subject: Add configurable render chunk size --- src/index.ts | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) (limited to 'src/index.ts') diff --git a/src/index.ts b/src/index.ts index f58cc5b..3dab80f 100644 --- a/src/index.ts +++ b/src/index.ts @@ -8,12 +8,21 @@ import {ChunkAllocationMode, RaytraceContext, RaytracerOptions} from './models/R import {Vector} from './models/Vector'; import {Logger} from './Logger'; +let dispatcher: RaytraceDispatcher; + function render() { getRenderButton().classList.add('loading'); - const dispatcher = initDispatcher(parseOptions()); + getStopRenderButton().classList.remove('d-hide'); + getViewFullButton().classList.add('d-hide'); + dispatcher = initDispatcher(parseOptions()); dispatcher.requestRender(); } +function stopRender() { + dispatcher.stopRender(); + onRenderComplete(); +} + function initDispatcher(options: RaytracerOptions): RaytraceDispatcher { const {width, height} = parseResolution(); @@ -110,6 +119,7 @@ function parseOptions(): RaytracerOptions { maxRecurseDepth: 5, maxDrawDistance: 1000, directMemoryTransfer: getInputElement('direct-transfer').checked, + chunkSize: parseInt(getInputElement('chunk-size').value, 10), chunkAllocationMode: getChunkAllocationMode() }; } @@ -148,8 +158,9 @@ function getChunkAllocationMode(): ChunkAllocationMode { function registerEventListeners() { getRenderButton().addEventListener('click', render); + getStopRenderButton().addEventListener('click', stopRender); - document.getElementById('view-full')!.addEventListener('click', () => { + getViewFullButton().addEventListener('click', () => { const canvas = document.getElementById( 'render-output' ) as HTMLCanvasElement; @@ -177,12 +188,22 @@ function getDesiredThreadCount(): number { function onRenderComplete() { getRenderButton().classList.remove('loading'); + getStopRenderButton().classList.add('d-hide'); + getViewFullButton().classList.remove('d-hide'); } function getRenderButton(): HTMLElement { return document.getElementById('render')!; } +function getStopRenderButton(): HTMLElement { + return document.getElementById('stop-render')!; +} + +function getViewFullButton(): HTMLElement { + return document.getElementById('view-full')!; +} + function getInputElement(elementId: string) { return document.getElementById(elementId) as HTMLInputElement; } -- cgit v1.2.3