aboutsummaryrefslogtreecommitdiff
path: root/src/index.ts
diff options
context:
space:
mode:
authorJames Barnett <noreply@jamesbarnett.xyz>2025-07-26 14:44:33 +0100
committerJames Barnett <noreply@jamesbarnett.xyz>2025-07-26 14:44:33 +0100
commit7b06f4e9958562f3df09eecc368e92af013e5b39 (patch)
tree14050e7bd1d77cee6b806b07d177bd8734a73e6d /src/index.ts
parentebcef463bb6c447e788c90fe4235f2504de186d3 (diff)
downloadjs-raytracer-7b06f4e9958562f3df09eecc368e92af013e5b39.tar.xz
js-raytracer-7b06f4e9958562f3df09eecc368e92af013e5b39.zip
Add configurable render chunk size
Diffstat (limited to 'src/index.ts')
-rw-r--r--src/index.ts25
1 files changed, 23 insertions, 2 deletions
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;
}