OLD | NEW |
| (Empty) |
1 <!DOCTYPE html> | |
2 <html><head> | |
3 <meta charset="utf-8"> | |
4 <link rel="stylesheet" type="text/css" href="../unit.css" /> | |
5 <script type="application/x-javascript" src="../unit.js"></script> | |
6 <script type="application/x-javascript" src="../util.js"></script> | |
7 | |
8 <script type="application/x-javascript"> | |
9 | |
10 function assertIdxs(name, arr, length) { | |
11 // assertOk(name+": Read with negative idx should work", function(){ return ar
r[-1] }); | |
12 // assertOk(name+": Read with too large idx should work", function(){ return a
rr[length] }); | |
13 // assertOk(name+": Write with negative idx should work", function(){ arr[-1]
= 0 }); | |
14 // assertOk(name+": Write with too large idx should work", function(){ arr[len
gth] = 0 }); | |
15 // arr[0] = 2; | |
16 // assertEquals(name+": Test that write worked", 2, arr[0]); | |
17 // assertOk(name+": Write with bad value should work", function(){ arr[0] = {x
:"foo"} }); | |
18 // assertEquals(name+": Test that bad write didn't work", 2, arr[0]); | |
19 assertOk(name+": Read and writes with OK idxs should work", function(){ | |
20 for (var i=0; i<length; i++) arr[i] = i + 1; | |
21 for (var i=0; i<length; i++) arr[i] = arr[i] + 1; | |
22 for (var i=0; i<length; i++) assertEquals(name+": Test that reads and writes
work", i+2, arr[i]); | |
23 }); | |
24 } | |
25 | |
26 Tests.startUnit = function () { | |
27 var canvas = document.getElementById('gl'); | |
28 var gl = wrapGLContext(canvas.getContext(GL_CONTEXT_ID)); | |
29 prog = new Shader(gl, 'vert', 'frag'); | |
30 prog.use(); | |
31 prog.uniform4f('c', 255, 0, 0, 255); | |
32 va = prog.attrib('Vertex'); | |
33 buffer = gl.createBuffer(); | |
34 gl.bindBuffer(gl.ARRAY_BUFFER, buffer); | |
35 return [gl]; | |
36 } | |
37 | |
38 Tests.endUnit = function() { | |
39 prog.destroy(); | |
40 } | |
41 | |
42 Tests.testCreateFromArray = function() { | |
43 var a = new Float32Array([1,2,3,4,5,6]); | |
44 assertIdxs('Float', a, 6); | |
45 var a = new Int32Array([1,2,3,4,5,6]); | |
46 assertIdxs('Int', a, 6); | |
47 var a = new Int16Array([1,2,3,4,5,6]); | |
48 assertIdxs('Short', a, 6); | |
49 var a = new Int8Array([1,2,3,4,5,6]); | |
50 assertIdxs('Byte', a, 6); | |
51 var a = new Uint32Array([1,2,3,4,5,6]); | |
52 assertIdxs('UInt', a, 6); | |
53 var a = new Uint16Array([1,2,3,4,5,6]); | |
54 assertIdxs('UShort', a, 6); | |
55 var a = new Uint8Array([1,2,3,4,5,6]); | |
56 assertIdxs('UByte', a, 6); | |
57 } | |
58 Tests.testCreateFromCount = function() { | |
59 var a = new Float32Array(6); | |
60 assertIdxs('Float', a, 6); | |
61 var a = new Int32Array(6); | |
62 assertIdxs('Int', a, 6); | |
63 var a = new Int16Array(6); | |
64 assertIdxs('Short', a, 6); | |
65 var a = new Int8Array(6); | |
66 assertIdxs('Byte', a, 6); | |
67 var a = new Uint32Array(6); | |
68 assertIdxs('UInt', a, 6); | |
69 var a = new Uint16Array(6); | |
70 assertIdxs('UShort', a, 6); | |
71 var a = new Uint8Array(6); | |
72 assertIdxs('UByte', a, 6); | |
73 } | |
74 Tests.testCreateFromBuffer = function() { | |
75 var sz = 24; | |
76 var b = new ArrayBuffer(sz); | |
77 var a = new Float32Array(b); | |
78 assertIdxs('Float', a, sz/4); | |
79 var a = new Int32Array(b); | |
80 assertIdxs('Int', a, sz/4); | |
81 var a = new Int16Array(b); | |
82 assertIdxs('Short', a, sz/2); | |
83 var a = new Int8Array(b); | |
84 assertIdxs('Byte', a, sz/1); | |
85 var a = new Uint32Array(b); | |
86 assertIdxs('UInt', a, sz/4); | |
87 var a = new Uint16Array(b); | |
88 assertIdxs('UShort', a, sz/2); | |
89 var a = new Uint8Array(b); | |
90 assertIdxs('UByte', a, sz/1); | |
91 } | |
92 | |
93 Tests.testThatWritesChangeDrawing = function(gl) { | |
94 var verts = [ | |
95 0,0, | |
96 1,0, | |
97 1,1, | |
98 | |
99 0,0, | |
100 1,1, | |
101 0,1 | |
102 ]; | |
103 var a = new Float32Array(verts); | |
104 var arr = []; | |
105 for (var i=0; i<12; i++) | |
106 arr[i] = a[i]; | |
107 assertEquals("Test that reads work from an array-initialized Float32Array", ar
r, verts); | |
108 gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); | |
109 gl.bufferData(gl.ARRAY_BUFFER, a, gl.STATIC_DRAW); | |
110 gl.vertexAttribPointer(va, 2, gl.FLOAT, false, 0, 0); | |
111 gl.enableVertexAttribArray(va); | |
112 | |
113 var id = new Uint8Array(4); | |
114 gl.readPixels(8,8,1,1,gl.RGBA, gl.UNSIGNED_BYTE, id); | |
115 assertEquals([0, 0, 0, 0], [id[0], id[1], id[2], id[3]]); | |
116 | |
117 gl.drawArrays(gl.TRIANGLES, 0, 6); | |
118 | |
119 gl.readPixels(8,8,1,1,gl.RGBA, gl.UNSIGNED_BYTE, id); | |
120 assertEquals([255, 0, 0, 255], [id[0], id[1], id[2], id[3]]); | |
121 gl.readPixels(0,8,1,1,gl.RGBA, gl.UNSIGNED_BYTE, id); | |
122 assertEquals([0, 0, 0, 0], [id[0], id[1], id[2], id[3]]); | |
123 | |
124 a[0] = a[6] = a[10] = -1; | |
125 gl.bufferData(gl.ARRAY_BUFFER, a, gl.STATIC_DRAW); | |
126 gl.vertexAttribPointer(va, 2, gl.FLOAT, false, 0, 0); | |
127 | |
128 gl.drawArrays(gl.TRIANGLES, 0, 6); | |
129 | |
130 gl.readPixels(8,8,1,1,gl.RGBA, gl.UNSIGNED_BYTE, id); | |
131 assertEquals([255, 0, 0, 255], [id[0], id[1], id[2], id[3]]); | |
132 gl.readPixels(0,8,1,1,gl.RGBA, gl.UNSIGNED_BYTE, id); | |
133 assertEquals("Test that Float32Array#[]= worked and drawArrays drew a full-wid
th rectangle", | |
134 [255, 0, 0, 255], [id[0], id[1], id[2], id[3]]); | |
135 gl.readPixels(0,0,1,1,gl.RGBA, gl.UNSIGNED_BYTE, id); | |
136 assertEquals([0, 0, 0, 0], [id[0], id[1], id[2], id[3]]); | |
137 } | |
138 | |
139 </script> | |
140 <script id="vert" type="x-shader/x-vertex"> | |
141 attribute vec2 Vertex; | |
142 void main() | |
143 { | |
144 gl_Position = vec4(Vertex, 0.0, 1.0); | |
145 } | |
146 </script> | |
147 <script id="frag" type="x-shader/x-fragment"> | |
148 precision mediump float; | |
149 | |
150 uniform vec4 c; | |
151 void main() | |
152 { | |
153 gl_FragColor = c; | |
154 } | |
155 </script> | |
156 <style>canvas{border: 1px solid black}</style> | |
157 </head><body> | |
158 <canvas id="gl" width="16" height="16"></canvas> | |
159 </body></html> | |
OLD | NEW |