summaryrefslogtreecommitdiffstats
path: root/src/index.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/index.ts')
-rw-r--r--src/index.ts138
1 files changed, 5 insertions, 133 deletions
diff --git a/src/index.ts b/src/index.ts
index 8a5a067..718a321 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -1,141 +1,13 @@
-import {mat4} from 'gl-matrix';
+import Renderer from './view/Renderer';
+import Scene from './view/Scene';
(() => {
- const body = document.getElementsByTagName('body')[0];
-
const canvas = document.getElementById('rpgedit') as HTMLCanvasElement;
if (!canvas)
return;
- const gl = canvas.getContext('webgl') as WebGLRenderingContext;
- if (!gl)
- return;
-
- gl.clearColor(0.0, 0.0, 0.0, 1.0);
- gl.enable(gl.DEPTH_TEST);
-
-
- function compileShader(type: number, src: string): WebGLShader|null {
- let shader = gl.createShader(type);
- if (!shader) {
- console.error('Unable to create shader');
- return null;
- }
-
- gl.shaderSource(shader, src);
- gl.compileShader(shader);
-
- if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
- console.error('Unable to compile shader');
- return null;
- }
-
- return shader;
- }
-
-
- let shaderVertexPositionAttribute: number;
- let shaderPMatrixUniform: WebGLUniformLocation|null;
- let shaderVMatrixUniform: WebGLUniformLocation|null;
-
- function initShaders(): void {
- let shaderProgram = gl.createProgram();
-
- let vertexShader = compileShader(gl.VERTEX_SHADER, require('./default.vs'));
-
- let fragmentShaderSrc = require('./default.fs');
- let fragmentShader = compileShader(gl.FRAGMENT_SHADER, require('./default.fs'));
-
- if (!vertexShader || !fragmentShader)
- return;
-
- gl.attachShader(shaderProgram, vertexShader);
- gl.attachShader(shaderProgram, fragmentShader);
-
- gl.linkProgram(shaderProgram);
- if (!gl.getProgramParameter(shaderProgram, gl.LINK_STATUS)) {
- console.error('Unable to link shader');
- return;
- }
-
- gl.useProgram(shaderProgram);
-
- shaderVertexPositionAttribute = gl.getAttribLocation(shaderProgram, "aVertexPosition");
- gl.enableVertexAttribArray(shaderVertexPositionAttribute);
-
- shaderPMatrixUniform = gl.getUniformLocation(shaderProgram, "uPMatrix");
- shaderVMatrixUniform = gl.getUniformLocation(shaderProgram, "uVMatrix");
- }
-
-
- const triangleVertexPositionBuffer = gl.createBuffer();
- const squareVertexPositionBuffer = gl.createBuffer();
-
- function initScene(): void {
- gl.bindBuffer(gl.ARRAY_BUFFER, triangleVertexPositionBuffer);
- const triangleVertices = [
- 0.0, 1.0, 0.0,
- -1.0, -1.0, 0.0,
- 1.0, -1.0, 0.0
- ];
- gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(triangleVertices), gl.STATIC_DRAW);
-
- gl.bindBuffer(gl.ARRAY_BUFFER, squareVertexPositionBuffer);
- const squareVertices = [
- 1.0, 1.0, 0.0,
- -1.0, 1.0, 0.0,
- 1.0, -1.0, 0.0,
- -1.0, -1.0, 0.0
- ];
- gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(squareVertices), gl.STATIC_DRAW);
- }
-
- initShaders();
- initScene();
-
- const pMatrix = mat4.create();
- const vMatrix = mat4.create();
-
- function drawScene(): void {
- if (!shaderPMatrixUniform || !shaderVMatrixUniform)
- return;
-
- let width = canvas.width, height = canvas.height
-
- gl.viewport(0, 0, width, height);
- gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
-
- mat4.perspective(pMatrix, 45, width / height, 0.1, 100.0);
- gl.uniformMatrix4fv(shaderPMatrixUniform, false, pMatrix);
-
- mat4.identity(vMatrix);
- mat4.translate(vMatrix, vMatrix, [-1.5, 0.0, -7.0]);
- gl.uniformMatrix4fv(shaderVMatrixUniform, false, vMatrix);
-
- gl.bindBuffer(gl.ARRAY_BUFFER, triangleVertexPositionBuffer);
- gl.vertexAttribPointer(shaderVertexPositionAttribute, 3, gl.FLOAT, false, 0, 0);
- gl.drawArrays(gl.TRIANGLES, 0, 3);
-
- mat4.translate(vMatrix, vMatrix, [3.0, 0.0, 0.0]);
- gl.uniformMatrix4fv(shaderVMatrixUniform, false, vMatrix);
-
- gl.bindBuffer(gl.ARRAY_BUFFER, squareVertexPositionBuffer);
- gl.vertexAttribPointer(shaderVertexPositionAttribute, 3, gl.FLOAT, false, 0, 0);
- gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
- }
-
- function setSize(): void {
- var e = document.documentElement;
- var w = window.innerWidth || e.clientWidth || body.clientWidth;
- var h = window.innerHeight || e.clientHeight || body.clientHeight;
-
- canvas.width = w;
- canvas.height = h;
-
- drawScene()
- }
-
- window.addEventListener('resize', () => setSize());
- setSize();
+ const renderer = new Renderer(canvas);
+ const scene = new Scene(renderer);
+ scene.draw();
})();