drawArrays.html (3415B)
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.testDrawArraysVBO = function(gl, prog, v,n,t) { 47 var vbo = new VBO(gl, {size:3, data:Quad.vertices}); 48 vbo.draw(v); 49 assert(0 == checkError(gl, "vbo.draw")); 50 assertOk(function(){gl.drawArrays(gl.TRIANGLES, 5, 1);}); 51 assertOk(function(){gl.drawArrays(gl.TRIANGLES, 0, 2);}); 52 assertOk(function(){gl.drawArrays(gl.TRIANGLES, 0, 6);}); 53 assertOk(function(){gl.drawArrays(gl.TRIANGLES, 1, 5);}); 54 vbo.destroy(); 55 assert(0 == checkError(gl, "vbo.destroy")); 56 } 57 58 Tests.testDrawArraysVBOMulti = function(gl, prog, v,n,t) { 59 // creates VBOs for the quad arrays, binds them with 60 // vertexAttribPointer and calls drawArrays 61 var vbo = new VBO(gl, 62 {size:3, data:Quad.vertices}, 63 {size:3, data:Quad.normals}, 64 {size:2, data:Quad.texcoords}); 65 vbo.draw(v, n, t); 66 assert(0 == checkError(gl, "vbo.draw")); 67 assertOk(function(){gl.drawArrays(gl.TRIANGLES, 5, 1);}); 68 assertOk(function(){gl.drawArrays(gl.TRIANGLES, 0, 2);}); 69 assertOk(function(){gl.drawArrays(gl.TRIANGLES, 0, 6);}); 70 assertOk(function(){gl.drawArrays(gl.TRIANGLES, 1, 5);}); 71 gl.bindBuffer(gl.ARRAY_BUFFER, vbo.vbos[1]); 72 gl.vertexAttribPointer(n, 3, gl.FLOAT, false, 0, 0); 73 assertOk(function(){gl.drawArrays(gl.TRIANGLES, 5, 1);}); 74 assertOk(function(){gl.drawArrays(gl.TRIANGLES, 0, 2);}); 75 assertOk(function(){gl.drawArrays(gl.TRIANGLES, 0, 6);}); 76 assertOk(function(){gl.drawArrays(gl.TRIANGLES, 1, 5);}); 77 vbo.destroy(); 78 assert(0 == checkError(gl, "vbo.destroy")); 79 } 80 81 82 </script> 83 <script id="vert" type="x-shader/x-vertex"> 84 attribute vec3 Vertex; 85 attribute vec3 Normal; 86 attribute vec2 Tex; 87 88 varying vec4 texCoord0; 89 void main() 90 { 91 gl_Position = vec4(Vertex * Normal, 1.0); 92 texCoord0 = vec4(Tex,0.0,0.0) + gl_Position; 93 } 94 </script> 95 <script id="frag" type="x-shader/x-fragment"> 96 precision mediump float; 97 98 varying vec4 texCoord0; 99 void main() 100 { 101 vec4 c = texCoord0; 102 gl_FragColor = c; 103 } 104 </script> 105 106 107 <style>canvas{ position:absolute; }</style> 108 </head><body> 109 <canvas id="gl" width="1" height="1"></canvas> 110 </body></html>