aboutsummaryrefslogtreecommitdiff
path: root/src/index.ts
diff options
context:
space:
mode:
authorJames Barnett <noreply@jamesbarnett.xyz>2022-01-03 17:02:22 +0000
committerJames Barnett <noreply@jamesbarnett.xyz>2022-01-03 17:02:22 +0000
commit026a006b410a0132c2cb573edff4352b4333b857 (patch)
tree2a641595671a44a2e66619dd6f98dad118d30f0f /src/index.ts
parentdde729e31a3aa9b5dadd0c0f07b3cb1f497067bb (diff)
downloadjs-raytracer-026a006b410a0132c2cb573edff4352b4333b857.tar.xz
js-raytracer-026a006b410a0132c2cb573edff4352b4333b857.zip
Performance optimisations
Diffstat (limited to 'src/index.ts')
-rw-r--r--src/index.ts29
1 files changed, 27 insertions, 2 deletions
diff --git a/src/index.ts b/src/index.ts
index 3736c92..6b86f57 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -15,8 +15,8 @@ function render() {
}
function initDispatcher(options: RaytracerOptions): RaytraceDispatcher {
- const width = 960;
- const height = 720;
+ const {width, height} = parseResolution();
+
const fov = Math.PI / 3;
const framebuffer = new Framebuffer(width, height);
@@ -68,12 +68,37 @@ function parseOptions(): RaytracerOptions {
reflections: getInputElement('reflections-toggle').checked,
maxRecurseDepth: 5,
maxDrawDistance: 1000,
+ bufferDrawCalls: getInputElement('buffer-draw').checked,
+ directMemoryTransfer: getInputElement('direct-transfer').checked,
};
}
+function parseResolution(): {width: number; height: number} {
+ switch (getInputElement('res').value) {
+ case '720p':
+ default:
+ return {width: 960, height: 720};
+ case '1080p':
+ return {width: 1440, height: 1080};
+ case '1440p':
+ return {width: 1920, height: 1440};
+ case '4k':
+ return {width: 2880, height: 2160};
+ case '8k':
+ return {width: 5760, height: 4320};
+ }
+}
+
function registerEventListeners() {
getRenderButton().addEventListener('click', render);
+ document.getElementById('view-full')!.addEventListener('click', () => {
+ const canvas = document.getElementById(
+ 'render-output'
+ ) as HTMLCanvasElement;
+ window.open()!.document.body.innerHTML = `<img src=${canvas.toDataURL()}>`;
+ });
+
const threadsSlider = getInputElement('threads');
threadsSlider.addEventListener('input', () => {
getInputElement('threads-value').textContent = threadsSlider.value;