diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 17:32:43 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 17:32:43 +0000 |
commit | 6bf0a5cb5034a7e684dcc3500e841785237ce2dd (patch) | |
tree | a68f146d7fa01f0134297619fbe7e33db084e0aa /dom/canvas/test/webgl-mochitest/ensure-exts/test_implicit.html | |
parent | Initial commit. (diff) | |
download | thunderbird-upstream.tar.xz thunderbird-upstream.zip |
Adding upstream version 1:115.7.0.upstream/1%115.7.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'dom/canvas/test/webgl-mochitest/ensure-exts/test_implicit.html')
-rw-r--r-- | dom/canvas/test/webgl-mochitest/ensure-exts/test_implicit.html | 129 |
1 files changed, 129 insertions, 0 deletions
diff --git a/dom/canvas/test/webgl-mochitest/ensure-exts/test_implicit.html b/dom/canvas/test/webgl-mochitest/ensure-exts/test_implicit.html new file mode 100644 index 0000000000..e3ce1ad130 --- /dev/null +++ b/dom/canvas/test/webgl-mochitest/ensure-exts/test_implicit.html @@ -0,0 +1,129 @@ +<!DOCTYPE HTML> +<html> + <head> + <meta charset='utf-8'/> + <script src='/tests/SimpleTest/SimpleTest.js'></script> + <link rel='stylesheet' href='/tests/SimpleTest/test.css'> + <script src='ensure-ext.js'></script> + </head> + <body> + <script id='g_vs' type='text/plain'> + +void main() { + gl_PointSize = 1.0; +} + + </script> + <script id='g_fs' type='text/plain'> + +void main() { + gl_FragColor = vec4(0); +} + + </script> + <script> + +'use strict'; + +let gl = null; + +function CheckTexFloatRenderable(rgbaInternal, type) { + const tex = gl.createTexture(); + gl.bindTexture(gl.TEXTURE_2D, tex); + gl.texImage2D(gl.TEXTURE_2D, 0, rgbaInternal, 1, 1, 0, gl.RGBA, type, null); + + const fb = gl.createFramebuffer(); + gl.bindFramebuffer(gl.FRAMEBUFFER, fb); + gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, tex, 0); + return gl.checkFramebufferStatus(gl.FRAMEBUFFER) == gl.FRAMEBUFFER_COMPLETE; +} + +function CheckRbFloatRenderable(format) { + const rb = gl.createRenderbuffer(); + gl.bindRenderbuffer(gl.RENDERBUFFER, rb); + gl.renderbufferStorage(gl.RENDERBUFFER, format, 1, 1); + + const fb = gl.createFramebuffer(); + gl.bindFramebuffer(gl.FRAMEBUFFER, fb); + gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.RENDERBUFFER, rb); + return gl.checkFramebufferStatus(gl.FRAMEBUFFER) == gl.FRAMEBUFFER_COMPLETE; +} + +function CheckBlending() { + function CompileShader(type, elem) { + const text = elem.innerHTML.trim(); + const s = gl.createShader(type); + gl.shaderSource(s, text); + gl.compileShader(s); + return s; + } + + const vs = CompileShader(gl.VERTEX_SHADER, g_vs); + const fs = CompileShader(gl.FRAGMENT_SHADER, g_fs); + const p = gl.createProgram(); + gl.attachShader(p, vs); + gl.attachShader(p, fs); + gl.linkProgram(p); + gl.useProgram(p); + + gl.drawArrays(gl.POINTS, 0, 1); + if (gl.getError()) throw new Error('Unexpected GL error,'); + + gl.enable(gl.BLEND); + gl.drawArrays(gl.POINTS, 0, 1); + return gl.getError() == 0; +} + +function ResetGl(type) { + if (gl) { + const ext = gl.getExtension('WEBGL_lose_context'); + ext.loseContext(); + gl = null; + } + const c = document.createElement('canvas'); + gl = c.getContext(type); + return !!gl; +} + +function HasExt(name) { + return gl.getSupportedExtensions().indexOf(name) != -1; +} + +ResetGl('webgl'); +if (HasExt('EXT_color_buffer_half_float')) { + const ext = gl.getExtension('OES_texture_half_float'); + const implicitEnabled = CheckTexFloatRenderable(gl.RGBA, ext.HALF_FLOAT_OES); + ok(implicitEnabled, 'OES_texture_half_float should implicitly enable EXT_color_buffer_half_float.'); +} + +ResetGl('webgl'); +if (HasExt('WEBGL_color_buffer_float')) { + const ext = gl.getExtension('OES_texture_float'); + const implicitEnabled = CheckTexFloatRenderable(gl.RGBA, gl.FLOAT); + ok(implicitEnabled, 'OES_texture_float should implicitly enable WEBGL_color_buffer_float.'); + + if (HasExt('EXT_float_blend')) { + ok(CheckBlending(), 'OES_texture_float should implicitly enable EXT_float_blend.'); + } +} + +ResetGl('webgl'); +if (HasExt('EXT_float_blend')) { + const ext = gl.getExtension('WEBGL_color_buffer_float'); + CheckRbFloatRenderable(ext.RGBA32F_EXT); + const implicitEnabled = CheckBlending(); + ok(implicitEnabled, 'WEBGL_color_buffer_float should implicitly enable EXT_float_blend.'); +} + +if (ResetGl('webgl2')) { + if (HasExt('EXT_float_blend')) { + const ext = gl.getExtension('EXT_color_buffer_float'); + CheckTexFloatRenderable(gl.RGBA32F, gl.FLOAT); + const implicitEnabled = CheckBlending(); + ok(implicitEnabled, 'EXT_color_buffer_float should implicitly enable EXT_float_blend.'); + } +} + + </script> + </body> +</html> |