draw-with-changing-start-vertex-bug.html (3182B)
1 <!-- 2 Copyright (c) 2019 The Khronos Group Inc. 3 Use of this source code is governed by an MIT-style license that can be 4 found in the LICENSE.txt file. 5 --> 6 7 <!-- 8 This bug would occur after the app would render several times with the 9 same vertex attributes and buffers, but using a different start offset. 10 One of the buffers would likely have to be DYNAMIC. 11 12 See http://anglebug.com/1327 and http://crbug.com/594509 13 --> 14 15 <!DOCTYPE html> 16 <html> 17 <head> 18 <meta charset="utf-8"> 19 <title>Draw with changing start vertex test</title> 20 <link rel="stylesheet" href="../../resources/js-test-style.css"/> 21 <script src="../../js/js-test-pre.js"></script> 22 <script src="../../js/webgl-test-utils.js"></script> 23 </head> 24 <body> 25 <canvas id="canvas" width="16" height="16"> </canvas> 26 <div id="description"></div> 27 <div id="console"></div> 28 <script id="vshader" type="x-shader/x-vertex"> 29 attribute mediump vec4 position; 30 attribute mediump vec4 test; 31 attribute mediump vec4 expected; 32 varying mediump vec4 color; 33 void main(void) 34 { 35 gl_Position = position; 36 vec4 threshold = max(abs(expected) * 0.01, 1.0 / 64.0); 37 color = vec4(lessThanEqual(abs(test - expected), threshold)); 38 } 39 </script> 40 41 <script id="fshader" type="x-shader/x-fragment"> 42 varying mediump vec4 color; 43 void main(void) 44 { 45 gl_FragColor = color; 46 } 47 </script> 48 49 <script> 50 "use strict"; 51 description("Test calling drawArrays with repeatedly with a different start vertex"); 52 53 var wtu = WebGLTestUtils; 54 var canvas = document.getElementById("canvas1"); 55 var gl = wtu.create3DContext(canvas); 56 57 var program = wtu.setupProgram(gl, ["vshader", "fshader"], ["position", "test", "expected"]); 58 59 var vertexCount = 24; 60 var testData = new Float32Array(vertexCount); 61 62 for (var index = 0; index < vertexCount; ++index) { 63 testData[index] = index; 64 } 65 66 var quadData = new Float32Array(14) 67 quadData[0] = -1.0; quadData[1] = 1.0; 68 quadData[2] = -1.0; quadData[3] = -1.0; 69 quadData[4] = 1.0; quadData[5] = -1.0; 70 quadData[6] = -1.0; quadData[7] = 1.0; 71 quadData[8] = 1.0; quadData[9] = -1.0; 72 quadData[10] = 1.0; quadData[11] = 1.0; 73 quadData[12] = 0.0; quadData[13] = 0.0; 74 75 var quadBuffer = gl.createBuffer(); 76 gl.bindBuffer(gl.ARRAY_BUFFER, quadBuffer); 77 gl.bufferData(gl.ARRAY_BUFFER, quadData, gl.STATIC_DRAW); 78 gl.vertexAttribPointer(0, 2, gl.FLOAT, false, 0, 0); 79 gl.enableVertexAttribArray(0); 80 81 // Must be STATIC to trigger the bug. 82 var testBuffer = gl.createBuffer(); 83 gl.bindBuffer(gl.ARRAY_BUFFER, testBuffer); 84 gl.bufferData(gl.ARRAY_BUFFER, testData, gl.STATIC_DRAW); 85 gl.vertexAttribPointer(1, 1, gl.FLOAT, false, 0, 0); 86 gl.enableVertexAttribArray(1); 87 88 // Must be DYNAMIC to trigger the bug. 89 var expectedBuffer = gl.createBuffer(); 90 gl.bindBuffer(gl.ARRAY_BUFFER, expectedBuffer); 91 gl.bufferData(gl.ARRAY_BUFFER, testData, gl.DYNAMIC_DRAW); 92 gl.vertexAttribPointer(2, 1, gl.FLOAT, false, 0, 0); 93 gl.enableVertexAttribArray(2); 94 95 function check() { 96 wtu.checkCanvas(gl, [255, 255, 255, 255], "should be white"); 97 } 98 99 gl.drawArrays(gl.TRIANGLES, 0, 6); 100 check() 101 102 gl.drawArrays(gl.TRIANGLES, 0, 6); 103 check() 104 105 gl.drawArrays(gl.TRIANGLES, 1, 6); 106 check() 107 108 debug(""); 109 var successfullyParsed = true; 110 </script> 111 112 <script src="../../js/js-test-post.js"></script> 113 </body> 114 </html>