|
158 | 158 | // Next check that values outside the 0-1 range can be written. |
159 | 159 | var halfFloatTenK = 0x70E2; // Half float 10000 |
160 | 160 | var uint16Formats2 = [ |
161 | | - { format: gl.RGBA, subtractor: [10000, 10000, 10000, 10000], }, |
162 | | - { format: gl.RGB, subtractor: [10000, 10000, 10000, 1], }, |
| 161 | + { format: gl.RGBA, subtractor: [10000, 10000, 10000, 10000], requireRenderable: true}, |
| 162 | + { format: gl.RGB, subtractor: [10000, 10000, 10000, 1], requireRenderable: false}, |
163 | 163 | ]; |
164 | 164 |
|
165 | 165 | uint16Formats2.forEach(function(f) { |
|
171 | 171 | for (var ii = 0; ii < uint16Data.length; ii++) { |
172 | 172 | uint16Data[ii] = halfFloatTenK; |
173 | 173 | } |
174 | | - runRenderTest(format, f.subtractor, uint16Data); |
| 174 | + runRenderTest(format, f.subtractor, uint16Data, f.requireRenderable); |
175 | 175 | }); |
176 | 176 |
|
177 | 177 | (function() { |
178 | 178 | debug(""); |
| 179 | + var renderable = isRenderable(gl, ext); |
179 | 180 | var renderableExtName = "EXT_color_buffer_half_float"; |
180 | | - if (isRenderable(gl, ext)) { |
181 | | - var supported = gl.getSupportedExtensions(); |
182 | | - assertMsg(supported.includes(renderableExtName), |
183 | | - "Implicit renderability requires exposing support for " + renderableExtName); |
184 | | - } else { |
185 | | - var renderableExt = gl.getExtension(renderableExtName); |
186 | | - if (!renderableExt) { |
187 | | - testPassed(renderableExtName + " not supported. This is fine."); |
188 | | - return; |
189 | | - } |
190 | | - testPassed(renderableExtName + " supported. Proceeding to its tests."); |
| 181 | + var supported = gl.getSupportedExtensions().includes(renderableExtName); |
| 182 | + if (renderable && !supported) { |
| 183 | + testFailed("RGBA/HALF_FLOAT_OES is color renderable but " + renderableExtName + " not exposed"); |
| 184 | + } else if (supported && !renderable) { |
| 185 | + testFailed(renderableExtName + " is exposed but RGBA/HALF_FLOAT_OES is not color renderable"); |
191 | 186 | } |
192 | | - |
193 | | - if (runFramebufferTest()) { |
194 | | - runRenderTest(gl.RGBA, [10000, 10000, 10000, 10000], null); |
195 | | - runRenderTest(gl.RGB, [10000, 10000, 10000, 1], null); |
| 187 | + if (supported) { |
| 188 | + runRenderTest(gl.RGBA, [10000, 10000, 10000, 10000], null, true); |
| 189 | + runRenderTest(gl.RGB, [10000, 10000, 10000, 1], null, false); |
196 | 190 | } |
197 | 191 | })(); |
198 | 192 |
|
|
311 | 305 | wtu.checkCanvas(gl, [0, 255, 0, 255], "should be green"); |
312 | 306 | } |
313 | 307 |
|
314 | | -function runRenderTest(format, subtractor, data) |
| 308 | +function runRenderTest(format, subtractor, data, requireRenderable) |
315 | 309 | { |
316 | 310 | var formatString = wtu.glEnumToString(gl, format); |
317 | 311 |
|
|
340 | 334 | // It is legal for a WebGL implementation exposing the OES_texture_half_float extension to |
341 | 335 | // support half floating point textures but not as attachments to framebuffer objects. |
342 | 336 | if (gl.checkFramebufferStatus(gl.FRAMEBUFFER) != gl.FRAMEBUFFER_COMPLETE) { |
343 | | - testFailed(formatString + " render targets not supported."); |
| 337 | + if (requireRenderable) { |
| 338 | + testFailed(formatString + " render targets not supported."); |
| 339 | + } else { |
| 340 | + debug(formatString + " render targets not supported -- this is legal"); |
| 341 | + } |
344 | 342 | return; |
345 | 343 | } |
346 | 344 |
|
|
0 commit comments