-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathWebGLApp.js
More file actions
73 lines (64 loc) · 2.18 KB
/
WebGLApp.js
File metadata and controls
73 lines (64 loc) · 2.18 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
import RenderPreProcess from './Systems/RenderPreProcess.js';
import ClearCamera from './Systems/ClearCamera.js';
import SkyboxRenderer from './Systems/SkyboxRenderer.js';
import RenderPostProcess from './Systems/RenderPostProcess.js';
import Viewport from './DataSources/Viewport.js';
import Paths from './DataSources/Paths.js';
import Framebuffers from './DataSources/Framebuffers.js';
import Camera from './DataSources/Camera.js';
import SystemCollection from './SystemCollection.js';
/**
*
* @param {string} canvasElementId
* @param {Paths} paths
*/
export function createDefaultSystems(canvasElementId, paths) {
const canvas = document.getElementById(canvasElementId);
const gl = canvas.getContext("webgl2");
let viewport = new Viewport();
viewport.canvasElementId = canvasElementId;
viewport.width = canvas.width;
viewport.height = canvas.height;
let framebuffers = new Framebuffers();
let camera = new Camera();
let postProcessEffects = [];
return {
data: {
viewport: viewport,
framebuffers: framebuffers,
camera: camera,
postProcessEffects: postProcessEffects,
},
preUpdate: [
new RenderPreProcess(gl, framebuffers, viewport),
new ClearCamera(gl, camera),
],
postUpdate: [
new SkyboxRenderer(gl, camera, paths),
new RenderPostProcess(gl, framebuffers, paths, viewport, postProcessEffects),
]
};
}
/**
*
* @param {string} canvasElementId
* @param {SystemCollection} systems
*/
export function run(canvasElementId, systems) {
const canvas = document.getElementById(canvasElementId);
canvas.onmousedown = event => systems.onMouseDown(event);
canvas.onmouseup = event => systems.onMouseUp(event);
canvas.onmousemove = event => systems.onMouseMove(event);
canvas.onwheel = event => systems.onWheel(event);
systems.onStart();
let then = 0;
function render(now) {
now *= 0.001;
const deltaTime = now - then;
then = now;
systems.onUpdate(deltaTime);
systems.onRender();
requestAnimationFrame(render);
}
requestAnimationFrame(render);
}