OLD | NEW |
| 1 <!-- |
| 2 |
| 3 /* |
| 4 ** Copyright (c) 2013 The Khronos Group Inc. |
| 5 ** |
| 6 ** Permission is hereby granted, free of charge, to any person obtaining a |
| 7 ** copy of this software and/or associated documentation files (the |
| 8 ** "Materials"), to deal in the Materials without restriction, including |
| 9 ** without limitation the rights to use, copy, modify, merge, publish, |
| 10 ** distribute, sublicense, and/or sell copies of the Materials, and to |
| 11 ** permit persons to whom the Materials are furnished to do so, subject to |
| 12 ** the following conditions: |
| 13 ** |
| 14 ** The above copyright notice and this permission notice shall be included |
| 15 ** in all copies or substantial portions of the Materials. |
| 16 ** |
| 17 ** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
| 18 ** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
| 19 ** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. |
| 20 ** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY |
| 21 ** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, |
| 22 ** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE |
| 23 ** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. |
| 24 */ |
| 25 |
| 26 --> |
| 27 |
1 <!DOCTYPE html> | 28 <!DOCTYPE html> |
2 <html> | 29 <html> |
3 <head> | 30 <head> |
4 <meta charset="utf-8"> | 31 <meta charset="utf-8"> |
5 <title>WebGL OES_texture_half_float Conformance Tests</title> | 32 <title>WebGL OES_texture_half_float Conformance Tests</title> |
6 <link rel="stylesheet" href="../../js/resources/js-test-style.css"/> | 33 <link rel="stylesheet" href="../../resources/js-test-style.css"/> |
7 <script src="resources/desktop-gl-constants.js" type="text/javascript"></script> | 34 <script src="../../resources/desktop-gl-constants.js" type="text/javascript"></s
cript> |
8 <script src="../../js/resources/js-test-pre.js"></script> | 35 <script src="../../resources/js-test-pre.js"></script> |
9 <script src="resources/webgl-test.js"></script> | 36 <script src="../resources/webgl-test.js"></script> |
10 <script src="resources/webgl-test-utils.js"></script> | 37 <script src="../resources/webgl-test-utils.js"></script> |
11 </head> | 38 </head> |
12 <body> | 39 <body> |
13 <div id="description"></div> | 40 <div id="description"></div> |
14 <canvas id="canvas" style="width: 50px; height: 50px;"> </canvas> | 41 <canvas id="canvas" style="width: 50px; height: 50px;"> </canvas> |
15 <div id="console"></div> | 42 <div id="console"></div> |
16 <script id="testFragmentShader" type="x-shader/x-fragment"> | 43 <script id="testFragmentShader" type="x-shader/x-fragment"> |
17 precision mediump float; | 44 precision mediump float; |
18 uniform sampler2D tex; | 45 uniform sampler2D tex; |
19 uniform vec4 subtractor; | 46 uniform vec4 subtractor; |
20 varying vec2 texCoord; | 47 varying vec2 texCoord; |
21 void main() | 48 void main() |
22 { | 49 { |
23 vec4 color = texture2D(tex, texCoord); | 50 vec4 color = texture2D(tex, texCoord); |
24 if (abs(color.r - subtractor.r) + | 51 if (abs(color.r - subtractor.r) + |
25 abs(color.g - subtractor.g) + | 52 abs(color.g - subtractor.g) + |
26 abs(color.b - subtractor.b) + | 53 abs(color.b - subtractor.b) + |
27 abs(color.a - subtractor.a) < 8.0) { | 54 abs(color.a - subtractor.a) < 8.0) { |
28 gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0); | 55 gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0); |
29 } else { | 56 } else { |
30 gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0); | 57 gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0); |
31 } | 58 } |
32 } | 59 } |
33 </script> | 60 </script> |
34 <!-- Shaders for testing half floating-point render targets --> | 61 <!-- Shaders for testing half-floating-point render targets --> |
35 <script id="positionVertexShader" type="x-shader/x-vertex"> | 62 <script id="positionVertexShader" type="x-shader/x-vertex"> |
36 attribute vec4 vPosition; | 63 attribute vec4 vPosition; |
37 void main() | 64 void main() |
38 { | 65 { |
39 gl_Position = vPosition; | 66 gl_Position = vPosition; |
40 } | 67 } |
41 </script> | 68 </script> |
42 <script id="floatingPointFragmentShader" type="x-shader/x-fragment"> | 69 <script id="floatingPointFragmentShader" type="x-shader/x-fragment"> |
43 void main() | 70 void main() |
44 { | 71 { |
45 gl_FragColor = vec4(10000.0, 10000.0, 10000.0, 10000.0); | 72 gl_FragColor = vec4(10000.0, 10000.0, 10000.0, 10000.0); |
46 } | 73 } |
47 </script> | 74 </script> |
48 <script> | 75 <script> |
| 76 "use strict" |
49 description("This test verifies the functionality of OES_texture_half_float with
null/non-null ArrayBufferView"); | 77 description("This test verifies the functionality of OES_texture_half_float with
null/non-null ArrayBufferView"); |
| 78 |
50 debug(""); | 79 debug(""); |
51 | |
52 if (window.internals) | |
53 window.internals.settings.setWebGLErrorsToConsoleEnabled(false); | |
54 | |
55 var wtu = WebGLTestUtils; | 80 var wtu = WebGLTestUtils; |
56 var canvas = document.getElementById("canvas"); | 81 var canvas = document.getElementById("canvas"); |
57 var gl = wtu.create3DContext(canvas); | 82 var gl = wtu.create3DContext(canvas); |
| 83 // This constant must be defined in order to run the texture creation test witho
ut the extension enabled. |
| 84 var halfFloatOESEnum = 0x8D61; |
| 85 var ext = null; |
58 | 86 |
59 if (!gl) { | 87 if (!gl) { |
60 testFailed("WebGL context does not exists"); | 88 testFailed("WebGL context does not exists"); |
61 } else { | 89 } else { |
62 testPassed("WebGL context exists"); | 90 testPassed("WebGL context exists"); |
63 | 91 |
64 // Verify that allocation of texture fails if extension is not enabled | 92 // Verify that allocation of texture fails if extension is not enabled |
65 runTextureCreationTest(false); | 93 runTextureCreationTest(false); |
66 | 94 |
67 if(!gl.getExtension("OES_texture_half_float")) { | 95 if (!(ext = gl.getExtension("OES_texture_half_float"))) { |
68 testPassed("No OES_texture_half_float support. This is legal"); | 96 testPassed("No OES_texture_half_float support. This is legal"); |
69 } else { | 97 } else { |
70 testPassed("Successfully enabled OES_texture_half_float extension"); | 98 testPassed("Successfully enabled OES_texture_half_float extension"); |
71 | 99 |
72 // Check if creation of texture succeed's with various formats and null
ArrayBufferView | 100 // Check if creation of texture succeed's with various formats and null
ArrayBufferView |
73 var formats = [gl.RGBA, gl.RGB, gl.LUMINANCE, gl.ALPHA, gl.LUMINANCE_ALP
HA]; | 101 var formats = [gl.RGBA, gl.RGB, gl.LUMINANCE, gl.ALPHA, gl.LUMINANCE_ALP
HA]; |
74 for (var i = 0; i < formats.length; i++) { | 102 for (var i = 0; i < formats.length; i++) { |
75 runTextureCreationTest(true, formats[i], null); | 103 runTextureCreationTest(true, formats[i], null); |
76 } | 104 } |
77 | 105 |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
155 | 183 |
156 if (!extensionEnabled || data) | 184 if (!extensionEnabled || data) |
157 expectSuccess = false; | 185 expectSuccess = false; |
158 debug("Testing texture creation with extension " + (extensionEnabled ? "enab
led" : "disabled") + | 186 debug("Testing texture creation with extension " + (extensionEnabled ? "enab
led" : "disabled") + |
159 ", format " + getFormatName(format) + ", and data " + (data ? "non-nul
l" : "null") + | 187 ", format " + getFormatName(format) + ", and data " + (data ? "non-nul
l" : "null") + |
160 ". Expect " + (expectSuccess ? "Success" : "Failure")); | 188 ". Expect " + (expectSuccess ? "Success" : "Failure")); |
161 | 189 |
162 var texture = allocateTexture(); | 190 var texture = allocateTexture(); |
163 var width = 2; | 191 var width = 2; |
164 var height = 2; | 192 var height = 2; |
165 gl.texImage2D(gl.TEXTURE_2D, 0, format, width, height, 0, format, gl.HALF_FL
OAT_OES, data); | 193 gl.texImage2D(gl.TEXTURE_2D, 0, format, width, height, 0, format, halfFloatO
ESEnum, data); |
166 if(!extensionEnabled) { | 194 if(!extensionEnabled) { |
167 glErrorShouldBe(gl, gl.INVALID_ENUM, "Half floating point texture must b
e diallowed if OES_texture_half_float isn't enabled"); | 195 glErrorShouldBe(gl, gl.INVALID_ENUM, "Half floating point texture must b
e diallowed if OES_texture_half_float isn't enabled"); |
168 return; | 196 return; |
169 } else if (data) { | 197 } else if (data) { |
170 glErrorShouldBe(gl, gl.INVALID_OPERATION, "Half floating point texture a
llocation must be diallowed when ArrayBufferView is not-null"); | 198 glErrorShouldBe(gl, gl.INVALID_OPERATION, "Half floating point texture a
llocation must be diallowed when ArrayBufferView is not-null"); |
171 return; | 199 return; |
172 } else { | 200 } else { |
173 glErrorShouldBe(gl, gl.NO_ERROR, "Half floating point texture allocation
should succeed if OES_texture_half_float is enabled"); | 201 glErrorShouldBe(gl, gl.NO_ERROR, "Half floating point texture allocation
should succeed if OES_texture_half_float is enabled"); |
174 } | 202 } |
175 } | 203 } |
176 | 204 |
177 function checkRenderingResults() | 205 function checkRenderingResults() |
178 { | 206 { |
179 wtu.checkCanvas(gl, [0, 255, 0, 255], "should be green"); | 207 wtu.checkCanvas(gl, [0, 255, 0, 255], "should be green"); |
180 } | 208 } |
181 | 209 |
182 function runRenderTargetTest(testProgram) | 210 function runRenderTargetTest(testProgram) |
183 { | 211 { |
184 debug(""); | 212 debug(""); |
185 debug("Testing half floating point render target"); | 213 debug("Testing half floating point render target"); |
186 | 214 |
187 var texture = allocateTexture(); | 215 var texture = allocateTexture(); |
188 var width = 2; | 216 var width = 2; |
189 var height = 2; | 217 var height = 2; |
190 | 218 |
191 gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.HALF_
FLOAT_OES, null); | 219 gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, ext.HALF
_FLOAT_OES, null); |
192 glErrorShouldBe(gl, gl.NO_ERROR, "Half floating point texture allocation sho
uld succeed if OES_texture_half_float is enabled"); | 220 glErrorShouldBe(gl, gl.NO_ERROR, "Half floating point texture allocation sho
uld succeed if OES_texture_half_float is enabled"); |
193 | 221 |
194 // Try to use this texture as render target | 222 // Try to use this texture as render target |
195 var fbo = gl.createFramebuffer(); | 223 var fbo = gl.createFramebuffer(); |
196 gl.bindFramebuffer(gl.FRAMEBUFFER, fbo); | 224 gl.bindFramebuffer(gl.FRAMEBUFFER, fbo); |
197 gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D,
texture, 0); | 225 gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D,
texture, 0); |
198 gl.bindTexture(gl.TEXTURE_2D, null); | 226 gl.bindTexture(gl.TEXTURE_2D, null); |
199 | 227 |
200 // It is legal for a WebGL implementation exposing the OES_texture_half_floa
t extension to | 228 // It is legal for a WebGL implementation exposing the OES_texture_half_floa
t extension to |
201 // support half floating point textures but not as attachments to framebuffe
r objects. | 229 // support half floating point textures but not as attachments to framebuffe
r objects. |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
236 { | 264 { |
237 debug("Testing that getExtension() returns the same object each time"); | 265 debug("Testing that getExtension() returns the same object each time"); |
238 gl.getExtension("OES_texture_half_float").myProperty = 2; | 266 gl.getExtension("OES_texture_half_float").myProperty = 2; |
239 gc(); | 267 gc(); |
240 shouldBe('gl.getExtension("OES_texture_half_float").myProperty', '2'); | 268 shouldBe('gl.getExtension("OES_texture_half_float").myProperty', '2'); |
241 } | 269 } |
242 | 270 |
243 debug(""); | 271 debug(""); |
244 var successfullyParsed = true; | 272 var successfullyParsed = true; |
245 </script> | 273 </script> |
246 <script src="../../js/resources/js-test-post.js"></script> | 274 <script src="../../resources/js-test-post.js"></script> |
247 | 275 |
248 </body> | 276 </body> |
249 </html> | 277 </html> |
OLD | NEW |