Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(169)

Side by Side Diff: conformance/reading/read-pixels-pack-alignment.html

Issue 8342021: Add webgl conformance tests r15841. (Closed) Base URL: svn://chrome-svn/chrome/trunk/deps/third_party/webgl/sdk/tests/
Patch Set: Created 9 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « conformance/reading/00_test_list.txt ('k') | conformance/reading/read-pixels-test.html » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Property Changes:
Added: svn:eol-style
+ LF
OLDNEW
(Empty)
1 <!--
2 Copyright (c) 2011 The Chromium Authors. All rights reserved.
3 Use of this source code is governed by a BSD-style license that can be
4 found in the LICENSE file.
5 -->
6 <!DOCTYPE html>
7 <html>
8 <head>
9 <meta charset="utf-8">
10 <link rel="stylesheet" href="../../resources/js-test-style.css"/>
11 <script src="../../resources/js-test-pre.js"></script>
12 <script src="../resources/webgl-test.js"></script>
13 <script id="vshader" type="x-shader/x-vertex">
14 attribute vec3 pos;
15 attribute vec4 colorIn;
16 varying vec4 color;
17
18 void main()
19 {
20 color = colorIn;
21 gl_Position = vec4(pos.xyz, 1.0);
22 }
23 </script>
24
25 <script id="fshader" type="x-shader/x-fragment">
26 precision mediump float;
27 varying vec4 color;
28
29 void main()
30 {
31 gl_FragColor = color;
32 }
33 </script>
34 </head>
35 <body>
36 <canvas id="example" width="32px" height="32px"></canvas>
37 <div id="description"></div>
38 <div id="console"></div>
39 <script>
40 var successfullyParsed = false;
41
42 // The below declarations need to be global for "shouldBe" to see them
43 var gl = null;
44 var array = null;
45 var pixel = [ 0, 0, 0, 0 ];
46 var expectedColor = [ 0, 0, 0, 0 ];
47
48 function calculatePixelBytes(format, type)
49 {
50 var size = 0;
51 switch (format) {
52 case gl.ALPHA:
53 size = 1;
54 break;
55 case gl.RGB:
56 size = 3;
57 break;
58 case gl.RGBA:
59 size = 4;
60 break;
61 default:
62 return -1;
63 }
64 switch (type) {
65 case gl.UNSIGNED_BYTE:
66 break;
67 case gl.UNSIGNED_SHORT_5_6_5:
68 if (format != gl.RGB)
69 return -1;
70 size = 2;
71 break;
72 case gl.UNSIGNED_SHORT_4_4_4_4:
73 case gl.UNSIGNED_SHORT_5_5_5_1:
74 if (format != gl.RGBA)
75 return -1;
76 size = 2;
77 break;
78 default:
79 return -1;
80 }
81 return size;
82 }
83
84 function calculatePaddingBytes(bytesPerPixel, packAlignment, width)
85 {
86 var padding = 0;
87 switch (packAlignment) {
88 case 1:
89 case 2:
90 case 4:
91 case 8:
92 padding = (bytesPerPixel * width) % packAlignment;
93 if (padding > 0)
94 padding = packAlignment - padding;
95 break;
96 default:
97 return -1;
98 }
99 return padding;
100 }
101
102 function packColor(format, type, r, g, b, a)
103 {
104 // FIXME: not sure if the color packing is correct for UNSIGNED_SHORT_*.
105 var color = [ 0, 0, 0, 0 ];
106 switch (type) {
107 case gl.UNSIGNED_BYTE:
108 switch (format) {
109 case gl.ALPHA:
110 color[0] = a;
111 break;
112 case gl.RGB:
113 color[0] = r;
114 color[1] = g;
115 color[2] = b;
116 break;
117 case gl.RGBA:
118 color[0] = r;
119 color[1] = g;
120 color[2] = b;
121 color[3] = a;
122 break;
123 default:
124 return null;
125 }
126 break;
127 case gl.UNSIGNED_SHORT_5_6_5:
128 if (format != gl.RGB)
129 return null;
130 r >>= 3;
131 g >>= 2;
132 b >>= 3;
133 color[0] = (r << 11) + (g << 5) + b;
134 break;
135 case gl.UNSIGNED_SHORT_4_4_4_4:
136 if (format != gl.RGBA)
137 return null;
138 r >>= 4;
139 g >>= 4;
140 b >>= 4;
141 a >>= 4;
142 color[0] = (r << 12) + (g << 8) + (b << 4) + a;
143 break;
144 case gl.UNSIGNED_SHORT_5_5_5_1:
145 if (format != gl.RGBA)
146 return null;
147 r >>= 3;
148 g >>= 3;
149 b >>= 3;
150 a >>= 7;
151 color[0] = (r << 11) + (g << 6) + (b << 1) + a;
152 break;
153 Default:
154 return null;
155 }
156 return color;
157 }
158
159 function runTestIteration(format, type, packAlignment, width, height)
160 {
161 debug("Testing PACK_ALIGNMENT = " + packAlignment + ", width = " + width + " , height = " + height);
162 gl.clearColor(1, 0.4, 0, 1);
163 gl.clear(gl.COLOR_BUFFER_BIT);
164 gl.pixelStorei(gl.PACK_ALIGNMENT, packAlignment);
165 glErrorShouldBe(gl, gl.NO_ERROR);
166 var bytesPerPixel = calculatePixelBytes(format, type);
167 var padding = calculatePaddingBytes(bytesPerPixel, packAlignment, width);
168 var size = bytesPerPixel * width * height + padding * (height - 1);
169 if (type != gl.UNSIGNED_BYTE) {
170 throw "test error: only UNSIGNED_BYTE is valid to ReadPixels";
171 }
172 if (size < 0)
173 size = 0;
174 array = new Uint8Array(size);
175 gl.readPixels(0, 0, width, height, format, type, array);
176 if (width < 0 || height < 0) {
177 glErrorShouldBe(gl, gl.INVALID_VALUE);
178 return;
179 }
180
181 glErrorShouldBe(gl, gl.NO_ERROR);
182 if (!array.length)
183 return;
184
185 // Check the last pixel of the last row.
186 var bytesPerRow = width * bytesPerPixel + padding;
187 var pos = bytesPerRow * (height - 1) + (width - 1) * bytesPerPixel;
188 var numComponents = bytesPerPixel;
189 for (var i = 0; i < numComponents; ++i)
190 pixel[i] = array[pos + i];
191 for (var i = numComponents; i < 4; ++i)
192 pixel[i] = 0;
193 expectedColor = packColor(format, type, 255, 102, 0, 255);
194 shouldBeNonNull(expectedColor);
195 shouldBe("pixel", "expectedColor");
196 }
197
198 description('Verify readPixels() works fine with various PACK_ALIGNMENT values.' );
199
200 shouldBeNonNull("gl = initWebGL('example', 'vshader', 'fshader', [ 'pos', 'color In' ], [ 0, 0, 0, 1 ], 1)");
201 gl.disable(gl.BLEND);
202
203 var formats = [ gl.RGBA ];
204 var formatNames = [ "RGBA" ];
205
206 for (var i = 0; i < formats.length; ++i) {
207 var format = formats[i];
208
209 debug("Testing format = " + formatNames[i] + " and type = UNSIGNED_BYTE");
210 runTestIteration(format, gl.UNSIGNED_BYTE, 1, 1, 2);
211 runTestIteration(format, gl.UNSIGNED_BYTE, 2, 1, 2);
212 runTestIteration(format, gl.UNSIGNED_BYTE, 4, 1, 2);
213 runTestIteration(format, gl.UNSIGNED_BYTE, 8, 1, 2);
214 runTestIteration(format, gl.UNSIGNED_BYTE, 4, 2, 2);
215 runTestIteration(format, gl.UNSIGNED_BYTE, 8, 2, 2);
216 runTestIteration(format, gl.UNSIGNED_BYTE, 4, 3, 2);
217 runTestIteration(format, gl.UNSIGNED_BYTE, 8, 3, 2);
218 runTestIteration(format, gl.UNSIGNED_BYTE, 4, 4, 2);
219 runTestIteration(format, gl.UNSIGNED_BYTE, 8, 4, 2);
220 runTestIteration(format, gl.UNSIGNED_BYTE, 8, 5, 1);
221 runTestIteration(format, gl.UNSIGNED_BYTE, 4, 5, 2);
222 runTestIteration(format, gl.UNSIGNED_BYTE, 8, 5, 2);
223 runTestIteration(format, gl.UNSIGNED_BYTE, 8, 6, 2);
224 runTestIteration(format, gl.UNSIGNED_BYTE, 8, 7, 2);
225 runTestIteration(format, gl.UNSIGNED_BYTE, 8, 8, 2);
226 runTestIteration(format, gl.UNSIGNED_BYTE, 1, 0, 0);
227 runTestIteration(format, gl.UNSIGNED_BYTE, 2, 0, 0);
228 runTestIteration(format, gl.UNSIGNED_BYTE, 4, 0, 0);
229 runTestIteration(format, gl.UNSIGNED_BYTE, 8, 0, 0);
230 runTestIteration(format, gl.UNSIGNED_BYTE, 1, -1, 1);
231 runTestIteration(format, gl.UNSIGNED_BYTE, 2, 1, -1);
232 runTestIteration(format, gl.UNSIGNED_BYTE, 4, 0, -1);
233 runTestIteration(format, gl.UNSIGNED_BYTE, 8, -1, -1);
234 }
235
236 successfullyParsed = true;
237 </script>
238 <script src="../../resources/js-test-post.js"></script>
239 </body>
240 </html>
OLDNEW
« no previous file with comments | « conformance/reading/00_test_list.txt ('k') | conformance/reading/read-pixels-test.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698