4
<title>Shader Startup Benchmark</title>
5
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
7
<script type="text/javascript" src="glMatrix-0.9.5.min.js"></script>
8
<script type="text/javascript" src="webgl-utils.js"></script>
9
<script type="text/javascript" src="webgl-helpers.js"></script>
10
<script type="text/javascript" src="httpAjax.js"></script>
12
<script id="shader-fs" type="x-shader/x-fragment">
13
precision mediump float;
15
uniform vec2 iResolution;
16
uniform float iGlobalTime;
19
vec2 uv = gl_FragCoord.xy / iResolution.xy;
20
gl_FragColor = vec4(uv,0.5+0.5*sin(iGlobalTime),1.0);
25
<script id="shader-vs" type="x-shader/x-vertex">
26
attribute vec3 aVertexPosition;
28
uniform mat4 uMVMatrix;
29
uniform mat4 uPMatrix;
34
gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);
39
<script type="text/javascript">
41
function initShaders() {
42
var fragmentShader = getShader(gl, "shader-fs");
43
var vertexShader = getShader(gl, "shader-vs");
45
shaderProgram = gl.createProgram();
46
gl.attachShader(shaderProgram, vertexShader);
47
gl.attachShader(shaderProgram, fragmentShader);
48
gl.linkProgram(shaderProgram);
50
if (!gl.getProgramParameter(shaderProgram, gl.LINK_STATUS)) {
51
alert("Could not initialise shaders");
54
gl.useProgram(shaderProgram);
56
shaderProgram.vertexPositionAttribute = gl.getAttribLocation(shaderProgram, "aVertexPosition");
57
gl.enableVertexAttribArray(shaderProgram.vertexPositionAttribute);
59
shaderProgram.pMatrixUniform = gl.getUniformLocation(shaderProgram, "uPMatrix");
60
shaderProgram.mvMatrixUniform = gl.getUniformLocation(shaderProgram, "uMVMatrix");
62
shaderProgram.iResolutionUniform = gl.getUniformLocation(shaderProgram, "iResolution");
63
shaderProgram.iGlobalTimeUniform = gl.getUniformLocation(shaderProgram, "iGlobalTime");
67
var squareVertexPositionBuffer;
69
function initBuffers()
71
squareVertexPositionBuffer = gl.createBuffer();
72
gl.bindBuffer(gl.ARRAY_BUFFER, squareVertexPositionBuffer);
79
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);
80
squareVertexPositionBuffer.itemSize = 3;
81
squareVertexPositionBuffer.numItems = 4;
86
gl.uniform2f(shaderProgram.iResolutionUniform,gl.viewportWidth,gl.viewportHeight);
87
gl.uniform1f(shaderProgram.iGlobalTimeUniform,timecount);
89
gl.viewport(0, 0, gl.viewportWidth, gl.viewportHeight);
90
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
92
mat4.ortho(-1, 1, -1, 1, -1, 1, pMatrix)
93
mat4.identity(mvMatrix);
95
gl.bindBuffer(gl.ARRAY_BUFFER, squareVertexPositionBuffer);
96
gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, squareVertexPositionBuffer.itemSize, gl.FLOAT, false, 0, 0);
98
gl.uniformMatrix4fv(shaderProgram.pMatrixUniform, false, pMatrix);
99
gl.uniformMatrix4fv(shaderProgram.mvMatrixUniform, false, mvMatrix);
101
gl.drawArrays(gl.TRIANGLE_STRIP, 0, squareVertexPositionBuffer.numItems);
109
var timeNow = new Date().getTime();
111
var elapsed = timeNow - lastTime;
115
updatefps(elapsed,"fps");
116
sendbenchmark(8.0,"Startup Screenaligned");
120
requestAnimFrame(tick);
125
function webGLStart(canvas) {
126
var canvas = document.getElementById(canvas);
131
gl.clearColor(0.0, 0.0, 0.0, 1.0);
132
gl.enable(gl.DEPTH_TEST);
142
<body onload="genID('Startup Screenaligned');webGLStart('canvas');">
144
<canvas id="canvas" style="border: none;" width="400" height="400"></canvas>