|
import initWebGL from './initWebGL' |
|
import makeProgram from './makeProgram' |
|
|
|
// Use DomReady because we need to use the canvas element. |
|
DomReady.ready(function() { |
|
|
|
// Initialize the WebGL rendering context. |
|
const canvas = <HTMLCanvasElement> document.getElementById('canvas') |
|
const gl: WebGLRenderingContext = initWebGL(canvas) |
|
|
|
// Compile and link the shader programs. |
|
const vsSource = (<HTMLElement> document.getElementById('shader-vs')).innerText |
|
const fsSource = (<HTMLElement> document.getElementById('shader-fs')).innerText |
|
const program = makeProgram(gl, vsSource, fsSource) |
|
gl.useProgram(program) |
|
|
|
// Create some buffers for the WebGL program. |
|
const side = 2 |
|
const vertices: number[] = [ |
|
0, 0, 0.0, // 0 center |
|
-side / 2, -side / 2, 0.0, // 1 lower left |
|
+side / 2, -side / 2, 0.0, // 2 lower right |
|
+side / 2, +side / 2, 0.0, // 3 upper right |
|
-side / 2, +side / 2, 0.0 // 4 upper left |
|
] |
|
const vbo = gl.createBuffer() |
|
gl.bindBuffer(gl.ARRAY_BUFFER, vbo) |
|
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW) |
|
|
|
// The triangle indices are [0, 1, 2], [0, 2, 3], [0, 3, 4], [0, 4, 1]. |
|
const indices = [0, 1, 2, 0, 2, 3, 0, 3, 4, 0, 4, 1] |
|
const ibo = gl.createBuffer() |
|
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, ibo) |
|
gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array(indices), gl.STREAM_DRAW) |
|
|
|
// Set rendering context parameters. |
|
gl.clearColor(0.5, 0.5, 0.6, 1.0) |
|
gl.clear(gl.COLOR_BUFFER_BIT) |
|
gl.viewport(0, 0, canvas.width, canvas.height) |
|
|
|
// Send the buffers to the WebGL program. |
|
const aVertexPosition = gl.getAttribLocation(program, 'aVertexPosition') |
|
gl.enableVertexAttribArray(aVertexPosition) |
|
// The size parameter satisfy vertices.length() / 3 = number of vertices, 5. |
|
gl.vertexAttribPointer(aVertexPosition, 3, gl.FLOAT, false, 0, 0) |
|
|
|
gl.drawElements(gl.TRIANGLES, indices.length, gl.UNSIGNED_SHORT, 0) |
|
}) |