Skip to content

Commit a3c8fe9

Browse files
committed
done
1 parent 10c13d8 commit a3c8fe9

File tree

5 files changed

+85
-58
lines changed

5 files changed

+85
-58
lines changed

index.html

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,6 @@
1919
}
2020

2121
.flex-container div.right-col {
22-
margin-left: 10px;
23-
margin-right: 10px;
2422
width: 60%;
2523
}
2624

@@ -58,7 +56,15 @@
5856
<div id="speedup"></div>
5957
<div id="results"></div>
6058
</div>
61-
<div class="right-col" id="canvas">
59+
<div class="right-col">
60+
<div>
61+
<span id="canvas2"></span>
62+
<span id="canvas3"></span>
63+
</div>
64+
<div>
65+
<span id="canvas0"></span>
66+
<span id="canvas1"></span>
67+
</div>
6268
</div>
6369
</div>
6470
<script src="vendor/gpu.js" type="text/javascript" charset="utf-8"></script>

lib/app.js

Lines changed: 33 additions & 23 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/app.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/app.ts

Lines changed: 40 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,8 @@ let updateFPS = (fps: string) : void => {
4444
// document.getElementById('sphere-count').innerHTML = elem.value;
4545
// Scene.updateSphereCount(parseInt(elem.value));
4646
// setTimeout(() => {
47-
// renderLoop = renderer(gpuKernel, cpuKernel, canvas, Scene.generateScene());
48-
// canvasNeedsUpdate = true; // signal canvas replacement to renderer
47+
// renderLoop = renderer(gpuKernel, cpuKernel, canvas0, Scene.generateScene());
48+
// canvasNeedsUpdate = true; // signal canvas0 replacement to renderer
4949
// isRunning = true;
5050
// if (isRunning) { renderLoop() };
5151
// }, 1000)
@@ -98,8 +98,7 @@ let benchmark = (elem: HTMLInputElement) : void => {
9898
}
9999

100100
// Main renderer
101-
var renderer = (gpuKernel: any, cpuKernel: any,
102-
gpuCanvas: any, scene: Scene.Scene) : () => void => {
101+
var renderer = (gpuKernels: any[], cpuKernel: any, scene: Scene.Scene) : () => void => {
103102

104103
let camera = scene.camera,
105104
lights = scene.lights,
@@ -190,7 +189,7 @@ var renderer = (gpuKernel: any, cpuKernel: any,
190189
);
191190
if (bm.isBenchmarking) { endTime = performance.now(); }
192191
if (canvasNeedsUpdate) {
193-
// Do not waste cycles replacing the canvas
192+
// Do not waste cycles replacing the canvas0
194193
// if the mode did not change.
195194
canvasNeedsUpdate = false;
196195
let cv = document.getElementsByTagName("canvas")[0];
@@ -199,22 +198,26 @@ var renderer = (gpuKernel: any, cpuKernel: any,
199198
bdy.replaceChild(newCanvas, cv);
200199
}
201200
} else {
202-
if (bm.isBenchmarking) { startTime = performance.now(); }
203-
gpuKernel(
204-
camera, lights, entities,
205-
eyeVector, vpRight, vpUp,
206-
canvasHeight, canvasWidth, fovRadians,
207-
heightWidthRatio, halfWidth, halfHeight,
208-
cameraWidth, cameraHeight,
209-
pixelWidth, pixelHeight
210-
);
211-
if (bm.isBenchmarking) { endTime = performance.now(); }
212-
if (canvasNeedsUpdate) {
213-
canvasNeedsUpdate = false;
214-
let cv = document.getElementsByTagName("canvas")[0];
215-
let bdy = cv.parentNode;
216-
let newCanvas = gpuKernel.getCanvas();
217-
bdy.replaceChild(newCanvas, cv);
201+
for (let i = 0; i < gpuKernels.length; i++) {
202+
let gpuKernel = gpuKernels[i];
203+
if (bm.isBenchmarking) { startTime = performance.now(); }
204+
gpuKernel(
205+
camera, lights, entities,
206+
eyeVector, vpRight, vpUp,
207+
canvasHeight, canvasWidth, fovRadians,
208+
heightWidthRatio, halfWidth, halfHeight,
209+
cameraWidth, cameraHeight,
210+
pixelWidth, pixelHeight,
211+
i % 2, Math.floor(i / 2)
212+
);
213+
if (bm.isBenchmarking) { endTime = performance.now(); }
214+
if (canvasNeedsUpdate) {
215+
canvasNeedsUpdate = false;
216+
let cv = document.getElementById("canvas" + i).childNodes[0];
217+
let bdy = cv.parentNode;
218+
let newCanvas = gpuKernel.getCanvas();
219+
bdy.replaceChild(newCanvas, cv);
220+
}
218221
}
219222
}
220223

@@ -390,7 +393,7 @@ var createKernel = (mode: Mode, scene: Scene.Scene) : any => {
390393

391394
const opt: KernelOptions = {
392395
mode: stringOfMode(mode),
393-
dimensions: [scene.canvasWidth, scene.canvasHeight],
396+
dimensions: [scene.canvasWidth / 2, scene.canvasHeight / 2],
394397
debug: false,
395398
graphical: true,
396399
safeTextureReadHack: false,
@@ -419,7 +422,9 @@ var createKernel = (mode: Mode, scene: Scene.Scene) : any => {
419422
cameraWidth: number,
420423
cameraHeight: number,
421424
pixelWidth: number,
422-
pixelHeight: number) {
425+
pixelHeight: number,
426+
xOffset: number,
427+
yOffset: number) {
423428

424429
// Kernel canary code
425430
//
@@ -451,8 +456,8 @@ var createKernel = (mode: Mode, scene: Scene.Scene) : any => {
451456

452457
// Raytracer start!
453458

454-
var x = this.thread.x;
455-
var y = this.thread.y;
459+
var x = this.thread.x + (320 * xOffset);
460+
var y = this.thread.y + (320 * yOffset);
456461

457462
var xCompX = vpRight[0] * (x * pixelWidth - halfWidth);
458463
var xCompY = vpRight[1] * (x * pixelWidth - halfWidth);
@@ -681,13 +686,19 @@ addFunctions(gpu, utilityFunctions);
681686

682687
let scene = Scene.generateScene();
683688
var gpuKernel = createKernel(Mode.GPU, scene);
689+
var gpuKernel1 = createKernel(Mode.GPU, scene);
690+
var gpuKernel2 = createKernel(Mode.GPU, scene);
691+
var gpuKernel3 = createKernel(Mode.GPU, scene);
684692
var cpuKernel = createKernel(Mode.CPU, scene);
685693

686-
var canvas = gpuKernel.getCanvas();
687-
688-
document.getElementById('canvas').appendChild(canvas);
694+
document.getElementById('canvas0').appendChild(gpuKernel.getCanvas());
695+
document.getElementById('canvas1').appendChild(gpuKernel1.getCanvas());
696+
document.getElementById('canvas2').appendChild(gpuKernel2.getCanvas());
697+
document.getElementById('canvas3').appendChild(gpuKernel3.getCanvas());
689698

690-
var renderLoop = renderer(gpuKernel, cpuKernel, canvas, scene);
699+
var renderLoop = function() {
700+
return renderer([gpuKernel, gpuKernel1, gpuKernel2, gpuKernel3], cpuKernel, scene);
701+
}();
691702
window.onload = renderLoop;
692703

693704
// var testKernel = gpu.createKernel(function(x) {

src/scene.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ namespace Scene {
8484
{
8585
entityType: Entity.Type.SPHERE,
8686
red: rand(0.05, 0.95), green: rand(0.05, 0.95), blue: rand(0.05, 0.95),
87-
x: rand(-7, 7) /* so they don't get stuck */, y: rand(0, 7), z: rand(-7, 2), radius: rand(0.3, 2.8),
87+
x: rand(-7, 7) /* so they don't get stuck */, y: rand(0, 7), z: rand(-7, 2), radius: rand(1, 1),
8888
specularReflection: rand(0.1, 0.2), lambertianReflection: rand(0.8, 1),
8989
ambientColor: rand(0.1, 0.4), opacity: rand(0, 1),
9090
directionX: rand(minDirection, maxDirection),
@@ -115,7 +115,7 @@ namespace Scene {
115115
}]
116116

117117
let opts: Entity.Opts[] =
118-
generateRandomSpheres(4)
118+
generateRandomSpheres(15)
119119
.concat(light_opts)
120120
// .concat(plane_opts);
121121

0 commit comments

Comments
 (0)