diff options
| author | James Barnett <noreply@jamesbarnett.xyz> | 2022-01-02 20:38:01 +0000 |
|---|---|---|
| committer | James Barnett <noreply@jamesbarnett.xyz> | 2022-01-02 20:38:01 +0000 |
| commit | dde729e31a3aa9b5dadd0c0f07b3cb1f497067bb (patch) | |
| tree | 5b09c856af7c16008891b736cd504a3d068e234d /src | |
| parent | e075667cd2dc878dd9dceb07c85719f6712bcda1 (diff) | |
| download | js-raytracer-dde729e31a3aa9b5dadd0c0f07b3cb1f497067bb.tar.xz js-raytracer-dde729e31a3aa9b5dadd0c0f07b3cb1f497067bb.zip | |
Add console output
Diffstat (limited to 'src')
| -rw-r--r-- | src/Logger.ts | 10 | ||||
| -rw-r--r-- | src/RaytraceDispatcher.ts | 14 | ||||
| -rw-r--r-- | src/index.ts | 19 |
3 files changed, 35 insertions, 8 deletions
diff --git a/src/Logger.ts b/src/Logger.ts new file mode 100644 index 0000000..4087e91 --- /dev/null +++ b/src/Logger.ts @@ -0,0 +1,10 @@ +export class Logger { + constructor() {} + + log(message: string) { + const elem = document.getElementById('console')!; + elem.innerText += `${message}\n`; + elem.scrollTop = elem.scrollHeight; + console.log(message); + } +} diff --git a/src/RaytraceDispatcher.ts b/src/RaytraceDispatcher.ts index 866d2d1..1ce412f 100644 --- a/src/RaytraceDispatcher.ts +++ b/src/RaytraceDispatcher.ts @@ -3,13 +3,16 @@ import {Framebuffer} from './Framebuffer'; import {RaytraceContext} from './RaytraceContext'; import {instanceToPlain} from 'class-transformer'; import 'reflect-metadata'; +import {Logger} from './Logger'; export class RaytraceDispatcher { private renderStartMs: number; private responsesReceived = 0; constructor( readonly framebuffer: Framebuffer, - readonly context: RaytraceContext + readonly context: RaytraceContext, + readonly logger: Logger, + readonly onComplete: Function ) { this.renderStartMs = new Date().getTime(); } @@ -30,9 +33,7 @@ export class RaytraceDispatcher { rowEndIndex: number, context: RaytraceContext ) { - console.log( - `Dispatching worker for lines ${rowStartIndex} to ${rowEndIndex}` - ); + this.logger.log(`Dispatching worker: rows ${rowStartIndex}-${rowEndIndex}`); const raytracer = new Worker(new URL('./Raytracer.ts', import.meta.url)); @@ -55,9 +56,10 @@ export class RaytraceDispatcher { private handleWorkerComplete() { if (++this.responsesReceived === this.context.options.numThreads) { - console.log( - `Render completed in ${new Date().getTime() - this.renderStartMs}ms` + this.logger.log( + `Raytrace completed in ${new Date().getTime() - this.renderStartMs}ms` ); + this.onComplete(); } } diff --git a/src/index.ts b/src/index.ts index 5696fe0..3736c92 100644 --- a/src/index.ts +++ b/src/index.ts @@ -6,8 +6,10 @@ import {Material} from './Material'; import {RaytraceDispatcher} from './RaytraceDispatcher'; import {RaytraceContext, RaytracerOptions} from './RaytraceContext'; import {Vector} from './Vector'; +import {Logger} from './Logger'; function render() { + getRenderButton().classList.add('loading'); const dispatcher = initDispatcher(parseOptions()); dispatcher.requestRender(); } @@ -49,7 +51,12 @@ function initDispatcher(options: RaytracerOptions): RaytraceDispatcher { options ); - return new RaytraceDispatcher(framebuffer, context); + return new RaytraceDispatcher( + framebuffer, + context, + new Logger(), + onRenderComplete + ); } function parseOptions(): RaytracerOptions { @@ -65,7 +72,7 @@ function parseOptions(): RaytracerOptions { } function registerEventListeners() { - document.getElementById('render')?.addEventListener('click', render); // TODO disable once clicked + getRenderButton().addEventListener('click', render); const threadsSlider = getInputElement('threads'); threadsSlider.addEventListener('input', () => { @@ -86,6 +93,14 @@ function getDesiredThreadCount(): number { } } +function onRenderComplete() { + getRenderButton().classList.remove('loading'); +} + +function getRenderButton(): HTMLElement { + return document.getElementById('render')!; +} + function getInputElement(elementId: string) { return document.getElementById(elementId) as HTMLInputElement; } |