1
+ var gl ;
2
+ function initGL ( canvas ) {
3
+ try {
4
+ gl = canvas . getContext ( "experimental-webgl" ) ;
5
+ gl . viewportWidth = canvas . width ;
6
+ gl . viewportHeight = canvas . height ;
7
+ } catch ( e ) {
8
+ }
9
+ if ( ! gl ) {
10
+ alert ( "Could not initialise WebGL, sorry :-(" ) ;
11
+ }
12
+ }
13
+
14
+ var shaderProgram ;
15
+
16
+ function initShaders ( ) {
17
+ shaderProgram = utils . addShaderProg ( gl , 'main.vert' , 'main.frag' ) ;
18
+
19
+ gl . useProgram ( shaderProgram ) ;
20
+ shaderProgram . vertexPositionAttribute = gl . getAttribLocation ( shaderProgram , "aVertexPosition" ) ;
21
+ gl . enableVertexAttribArray ( shaderProgram . vertexPositionAttribute ) ;
22
+
23
+ shaderProgram . pMatrixUniform = gl . getUniformLocation ( shaderProgram , "uPMatrix" ) ;
24
+ shaderProgram . mvMatrixUniform = gl . getUniformLocation ( shaderProgram , "uMVMatrix" ) ;
25
+ }
26
+
27
+ var triangleVertexPositionBuffer ;
28
+
29
+ function initBuffers ( ) {
30
+ triangleVertexPositionBuffer = gl . createBuffer ( ) ;
31
+ gl . bindBuffer ( gl . ARRAY_BUFFER , triangleVertexPositionBuffer ) ;
32
+ var vertices = [
33
+ 0.0 , 1.0 , 0.0 ,
34
+ - 1.0 , - 1.0 , 0.0 ,
35
+ 1.0 , - 1.0 , 0.0 ] ;
36
+ gl . bufferData ( gl . ARRAY_BUFFER , new Float32Array ( vertices ) , gl . STATIC_DRAW ) ;
37
+ triangleVertexPositionBuffer . itemSize = 3 ;
38
+ triangleVertexPositionBuffer . numItems = 3 ;
39
+ }
40
+
41
+ var mvMatrix = mat4 . create ( ) ;
42
+ var pMatrix = mat4 . create ( ) ;
43
+
44
+ function drawScene ( ) {
45
+ gl . viewport ( 0 , 0 , gl . viewportWidth , gl . viewportHeight ) ;
46
+ gl . clear ( gl . COLOR_BUFFER_BIT | gl . DEPTH_BUFFER_BIT ) ;
47
+
48
+ mat4 . perspective ( 45 , gl . viewportWidth / gl . viewportHeight , 0.1 , 100.0 , pMatrix ) ;
49
+
50
+ mat4 . identity ( mvMatrix ) ;
51
+
52
+ mat4 . scale ( mvMatrix , mvMatrix , [ 0.5 , 0.5 , 0.5 ] ) ;
53
+ mat4 . translate ( mvMatrix , mvMatrix , [ - 0.5 , 0.0 , 0.0 ] ) ;
54
+ gl . bindBuffer ( gl . ARRAY_BUFFER , triangleVertexPositionBuffer ) ;
55
+ gl . vertexAttribPointer ( shaderProgram . vertexPositionAttribute , triangleVertexPositionBuffer . itemSize , gl . FLOAT , false , 0 , 0 ) ;
56
+ gl . uniformMatrix4fv ( shaderProgram . pMatrixUniform , false , pMatrix ) ;
57
+ gl . uniformMatrix4fv ( shaderProgram . mvMatrixUniform , false , mvMatrix ) ;
58
+
59
+ gl . drawArrays ( gl . TRIANGLES , 0 , triangleVertexPositionBuffer . numItems ) ;
60
+ }
61
+
62
+ function startGL ( ) {
63
+ var canvas = document . getElementById ( "canvas" ) ;
64
+ initGL ( canvas ) ;
65
+ initShaders ( ) ;
66
+ initBuffers ( ) ;
67
+
68
+ gl . clearColor ( 1.0 , 0.0 , 0.0 , 1.0 ) ;
69
+ gl . enable ( gl . DEPTH_TEST ) ;
70
+
71
+ drawScene ( ) ;
72
+ }
0 commit comments