@@ -44,8 +44,8 @@ let updateFPS = (fps: string) : void => {
44
44
// document.getElementById('sphere-count').innerHTML = elem.value;
45
45
// Scene.updateSphereCount(parseInt(elem.value));
46
46
// 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
49
49
// isRunning = true;
50
50
// if (isRunning) { renderLoop() };
51
51
// }, 1000)
@@ -98,8 +98,7 @@ let benchmark = (elem: HTMLInputElement) : void => {
98
98
}
99
99
100
100
// 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 => {
103
102
104
103
let camera = scene . camera ,
105
104
lights = scene . lights ,
@@ -190,7 +189,7 @@ var renderer = (gpuKernel: any, cpuKernel: any,
190
189
) ;
191
190
if ( bm . isBenchmarking ) { endTime = performance . now ( ) ; }
192
191
if ( canvasNeedsUpdate ) {
193
- // Do not waste cycles replacing the canvas
192
+ // Do not waste cycles replacing the canvas0
194
193
// if the mode did not change.
195
194
canvasNeedsUpdate = false ;
196
195
let cv = document . getElementsByTagName ( "canvas" ) [ 0 ] ;
@@ -199,22 +198,26 @@ var renderer = (gpuKernel: any, cpuKernel: any,
199
198
bdy . replaceChild ( newCanvas , cv ) ;
200
199
}
201
200
} 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
+ }
218
221
}
219
222
}
220
223
@@ -390,7 +393,7 @@ var createKernel = (mode: Mode, scene: Scene.Scene) : any => {
390
393
391
394
const opt : KernelOptions = {
392
395
mode : stringOfMode ( mode ) ,
393
- dimensions : [ scene . canvasWidth , scene . canvasHeight ] ,
396
+ dimensions : [ scene . canvasWidth / 2 , scene . canvasHeight / 2 ] ,
394
397
debug : false ,
395
398
graphical : true ,
396
399
safeTextureReadHack : false ,
@@ -419,7 +422,9 @@ var createKernel = (mode: Mode, scene: Scene.Scene) : any => {
419
422
cameraWidth : number ,
420
423
cameraHeight : number ,
421
424
pixelWidth : number ,
422
- pixelHeight : number ) {
425
+ pixelHeight : number ,
426
+ xOffset : number ,
427
+ yOffset : number ) {
423
428
424
429
// Kernel canary code
425
430
//
@@ -451,8 +456,8 @@ var createKernel = (mode: Mode, scene: Scene.Scene) : any => {
451
456
452
457
// Raytracer start!
453
458
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 ) ;
456
461
457
462
var xCompX = vpRight [ 0 ] * ( x * pixelWidth - halfWidth ) ;
458
463
var xCompY = vpRight [ 1 ] * ( x * pixelWidth - halfWidth ) ;
@@ -681,13 +686,19 @@ addFunctions(gpu, utilityFunctions);
681
686
682
687
let scene = Scene . generateScene ( ) ;
683
688
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 ) ;
684
692
var cpuKernel = createKernel ( Mode . CPU , scene ) ;
685
693
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 ( ) ) ;
689
698
690
- var renderLoop = renderer ( gpuKernel , cpuKernel , canvas , scene ) ;
699
+ var renderLoop = function ( ) {
700
+ return renderer ( [ gpuKernel , gpuKernel1 , gpuKernel2 , gpuKernel3 ] , cpuKernel , scene ) ;
701
+ } ( ) ;
691
702
window . onload = renderLoop ;
692
703
693
704
// var testKernel = gpu.createKernel(function(x) {
0 commit comments