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.
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">
15 Tests.startUnit = function () {
16 var canvas = document.getElementById('gl');
17 var gl = wrapGLContext(getGLContext(canvas));
18 var buf = gl.createBuffer();
19 var ebuf = gl.createBuffer();
20 gl.bindBuffer(gl.ARRAY_BUFFER, buf);
21 gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, ebuf);
22 return [gl, buf, ebuf];
25 Tests.testBufferData = function(gl) {
26 var data = [
0,
0,
0,
0,
1,
0,
0,
0,
0,
1,
0,
0];
27 gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(data), gl.STREAM_DRAW);
28 gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array(data), gl.STREAM_DRAW);
29 assertOk(
"zero length data",
30 function(){gl.bufferSubData(gl.ARRAY_BUFFER,
0, new Float32Array(
0));});
31 assertFail(
"number for data",
32 function(){gl.bufferSubData(gl.ARRAY_BUFFER,
0,
12);});
33 assertFail(
"bad target",
34 function(){gl.bufferSubData(gl.TEXTURE_2D,
0, new Float32Array([
1,
2,
3]));});
35 assertFail(
"array for data",
36 function(){gl.bufferSubData(gl.ARRAY_BUFFER,
0, [
1,
2,
3]);});
37 assertOk(
"floats in element buffer",
38 function(){gl.bufferSubData(gl.ELEMENT_ARRAY_BUFFER,
0, new Float32Array([
1,
2,
3]));});
39 assertFail(
"negative offset",
40 function(){gl.bufferSubData(gl.ELEMENT_ARRAY_BUFFER, -
1, new Uint16Array([
1,
2,
3]));});
41 assertFail(
"offset out of range",
42 function(){gl.bufferSubData(gl.ELEMENT_ARRAY_BUFFER,
24, new Uint16Array([
1,
2,
3]));});
43 assertFail(
"offset out of range",
44 function(){gl.bufferSubData(gl.ELEMENT_ARRAY_BUFFER,
2400000, new Uint16Array([
1,
2,
3]));});
45 assertFail(
"offset out of range",
46 function(){gl.bufferSubData(gl.ELEMENT_ARRAY_BUFFER,
19, new Uint16Array([
1,
2,
3]));});
47 assertFail(
"data too large",
48 function(){gl.bufferSubData(gl.ELEMENT_ARRAY_BUFFER,
0, new Uint16Array(data.concat([
1])));});
49 assertOk(
"offset + data.length = end",
50 function(){gl.bufferSubData(gl.ELEMENT_ARRAY_BUFFER,
18, new Uint16Array([
1,
2,
3]));});
51 assertOk(
"offset Infinity",
52 function(){gl.bufferSubData(gl.ELEMENT_ARRAY_BUFFER, Infinity, new Uint16Array([
1,
2,
3]));});
53 assertOk(
"offset -Infinity",
54 function(){gl.bufferSubData(gl.ELEMENT_ARRAY_BUFFER, -Infinity, new Uint16Array([
1,
2,
3]));});
55 assertOk(
"offset NaN",
56 function(){gl.bufferSubData(gl.ELEMENT_ARRAY_BUFFER, NaN, new Uint16Array([
1,
2,
3]));});
58 function(){gl.bufferSubData(gl.ELEMENT_ARRAY_BUFFER,
0, new Uint16Array([
1,
2,
3]));});
59 throwError(gl, 'bufferData0');
60 gl.bindBuffer(gl.ARRAY_BUFFER, null);
61 assertFail(
"setting buffer 0",
62 function(){gl.bufferSubData(gl.ARRAY_BUFFER,
0, new Float32Array([
1,
2,
3]));});
63 throwError(gl, 'bufferData1');
64 gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, null);
65 assertFail(
"setting buffer 0",
66 function(){gl.bufferSubData(gl.ELEMENT_ARRAY_BUFFER,
0, new Uint16Array([
1,
2,
3]));});
67 throwError(gl, 'bufferData2');
70 Tests.endUnit = function(gl, buf, ebuf) {
72 gl.deleteBuffer(ebuf);
76 <style>canvas{ position:absolute; }
</style>
78 <canvas id=
"gl" width=
"16" height=
"16"></canvas>