vertexAttrib.html (3634B)
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <!-- 6 Copyright (c) 2019 The Khronos Group Inc. 7 Use of this source code is governed by an MIT-style license that can be 8 found in the LICENSE.txt file. 9 --> 10 <link rel="stylesheet" type="text/css" href="../unit.css" /> 11 <script type="application/javascript" src="../unit.js"></script> 12 <script type="application/javascript" src="../util.js"></script> 13 <script type="application/javascript"> 14 15 var verts = [0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0]; 16 var normals = [0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0]; 17 var texcoords = [0.0,0.0, 1.0,0.0, 0.0,1.0]; 18 19 Tests.startUnit = function () { 20 var canvas = document.getElementById('gl'); 21 var gl = wrapGLContext(getGLContext(canvas)); 22 var prog = new Shader(gl, 'vert', 'frag'); 23 prog.use(); 24 var sh = prog.shader.program; 25 // log(gl.getShaderInfoLog(prog.shaders[1])); 26 var v = gl.getAttribLocation(sh, 'Vertex'); 27 var n = gl.getAttribLocation(sh, 'Normal'); 28 var t = gl.getAttribLocation(sh, 'Tex'); 29 return [gl,prog,v,n,t]; 30 } 31 32 Tests.setup = function(gl, prog, v,n,t) { 33 assert(0 == gl.getError()); 34 return [gl, prog, v,n,t]; 35 } 36 Tests.teardown = function(gl, prog, v,n,t) { 37 gl.disableVertexAttribArray(v); 38 gl.disableVertexAttribArray(n); 39 gl.disableVertexAttribArray(t); 40 } 41 42 Tests.endUnit = function(gl, prog, v,n,t) { 43 prog.destroy(); 44 } 45 46 Tests.testVertexAttrib = function(gl, prog, v,n,t) { 47 var vbo = gl.createBuffer(); 48 var vertsArr = new Float32Array(verts); 49 gl.bindBuffer(gl.ARRAY_BUFFER, vbo); 50 gl.bufferData(gl.ARRAY_BUFFER, vertsArr, gl.STATIC_DRAW); 51 gl.enableVertexAttribArray(v); 52 gl.vertexAttribPointer(v, 3, gl.FLOAT, false, 0, 0); 53 assertOk(function(){gl.drawArrays(gl.TRIANGLES, 0, 3);}); 54 gl.vertexAttrib1fv(v, [1]); 55 gl.vertexAttrib2fv(v, [1,2]); 56 gl.vertexAttrib3fv(v, [1,2,3]); 57 gl.vertexAttrib4fv(v, [1,2,3,4]); 58 gl.vertexAttrib1f(v, 1); 59 gl.vertexAttrib2f(v, 1,2); 60 gl.vertexAttrib3f(v, 1,2,3); 61 gl.vertexAttrib4f(v, 1,2,3,4); 62 assertOk(function(){gl.drawArrays(gl.TRIANGLES, 0, 3);}); 63 throwError(gl); 64 gl.bindBuffer(gl.ARRAY_BUFFER, null); 65 gl.deleteBuffer(vbo); 66 throwError(gl); 67 } 68 Tests.testVertexAttribVBO = function(gl, prog, v,n,t) { 69 var vbo = gl.createBuffer(); 70 var vertsArr = new Float32Array(verts); 71 gl.bindBuffer(gl.ARRAY_BUFFER, vbo); 72 gl.bufferData(gl.ARRAY_BUFFER, vertsArr, gl.STATIC_DRAW); 73 gl.enableVertexAttribArray(v); 74 gl.vertexAttribPointer(v, 3, gl.FLOAT, false, 0, 0); 75 gl.vertexAttrib1fv(v, [1]); 76 gl.vertexAttrib2fv(v, [1,2]); 77 gl.vertexAttrib3fv(v, [1,2,3]); 78 gl.vertexAttrib4fv(v, [1,2,3,4]); 79 gl.vertexAttrib1f(v, 1); 80 gl.vertexAttrib2f(v, 1,2); 81 gl.vertexAttrib3f(v, 1,2,3); 82 gl.vertexAttrib4f(v, 1,2,3,4); 83 assertOk(function(){gl.vertexAttribPointer(v, 3, gl.FLOAT, false, 0, 0);}); 84 assertOk(function(){gl.drawArrays(gl.TRIANGLES, 0, 3);}); 85 gl.vertexAttrib4fv(v, [1,2,3,4]); 86 assertOk(function(){gl.drawArrays(gl.TRIANGLES, 0, 3);}); 87 throwError(gl); 88 gl.bindBuffer(gl.ARRAY_BUFFER, null); 89 gl.deleteBuffer(vbo); 90 throwError(gl); 91 } 92 93 </script> 94 <script id="vert" type="x-shader/x-vertex"> 95 attribute vec3 Vertex; 96 attribute vec3 Normal; 97 attribute vec2 Tex; 98 99 varying vec4 texCoord0; 100 void main() 101 { 102 gl_Position = vec4(Vertex * Normal, 1.0); 103 texCoord0 = vec4(Tex,0.0,0.0) + gl_Position; 104 } 105 </script> 106 <script id="frag" type="x-shader/x-fragment"> 107 precision mediump float; 108 109 varying vec4 texCoord0; 110 void main() 111 { 112 vec4 c = texCoord0; 113 gl_FragColor = c; 114 } 115 </script> 116 117 118 <style>canvas{ position:absolute; }</style> 119 </head><body> 120 <canvas id="gl" width="1" height="1"></canvas> 121 </body></html>