File: xrLayerInit.https.html

package info (click to toggle)
firefox 147.0.3-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 4,683,320 kB
  • sloc: cpp: 7,607,359; javascript: 6,533,295; ansic: 3,775,223; python: 1,415,500; xml: 634,561; asm: 438,949; java: 186,241; sh: 62,752; makefile: 18,079; objc: 13,092; perl: 12,808; yacc: 4,583; cs: 3,846; pascal: 3,448; lex: 1,720; ruby: 1,003; php: 436; lisp: 258; awk: 247; sql: 66; sed: 54; csh: 10; exp: 6
file content (92 lines) | stat: -rw-r--r-- 4,164 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
<!doctype html>
<title>Tests for errors with invalid XRLayerInit parameters.</title>
<link rel="help" href="https://immersive-web.github.io/layers/#dom-xrwebglbinding-createquadlayer">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../resources/webxr_util.js"></script>
<script src="../resources/webxr_test_constants.js"></script>
<script src="./xr_layer_promise_test.js"></script>

<canvas id="webgl-canvas"></canvas>

<script>

  function testCommonXRLayerInitErrors(createLayerFn, valid_init, t, gl) {
    const is_webgl2 = gl instanceof WebGL2RenderingContext;
    return new Promise((resolve, reject) => {
      const max_texture_size = gl.getParameter(gl.MAX_TEXTURE_SIZE);
      if (!is_webgl2) {
        // Check an exception on texture-array.
        t.step(() => {
          // texture-array supported for webgl2 only.
          let invalid_texture_type = Object.assign({}, valid_init, { textureType: 'texture-array' });
          assert_throws_js(TypeError, () => createLayerFn(invalid_texture_type), "texture-array for webgl2 only");
        });

        // Check an exception on webgl2 color formats.
        t.step(() => {
          [
            0x8058, // GL_RGBA8
            0x8051, // GL_RGB8
            0x8C41, // GL_SRGB8
            0x8C43  // GL_SRGB8_ALPHA8
          ].forEach((colorFormat) => {
            let invalid_color_format = Object.assign({}, valid_init, { colorFormat });
            assert_throws_js(TypeError, () => createLayerFn(invalid_color_format), "colorFormat for webgl2 only");
          });
        });
      }

      t.step(() => {
        // Check an exception for invalid transform object.
        let invalid_transform = Object.assign({}, valid_init, { transform: { x: 0, y: 0, z: 0 } });
        assert_throws_js(TypeError, () => createLayerFn(invalid_transform), "Invalid transform object");
      });

      t.step(() => {
        // viewPixelWidth and viewPixelHeight must be greater than 0.
        let invalid_pixel_width = Object.assign({}, valid_init, { viewPixelWidth: 0 });
        assert_throws_js(TypeError, () => createLayerFn(invalid_pixel_width), "viewPixelWidth is 0");
      });

      t.step(() => {
        let invalid_pixel_height = Object.assign({}, valid_init, { viewPixelHeight: 0 });
        assert_throws_js(TypeError, () => createLayerFn(invalid_pixel_height), "viewPixelHeight is 0");
      });

      // viewPixelWidth and viewPixelHeight must not be too large.
      t.step(() => {
        let large_pixel_width = Object.assign({}, valid_init, { viewPixelWidth: max_texture_size + 1 });
        assert_throws_js(TypeError, () => createLayerFn(large_pixel_width), "viewPixelWidth is too large");
      });

      t.step(() => {
        let large_pixel_height = Object.assign({}, valid_init, { viewPixelHeight: max_texture_size + 1 });
        assert_throws_js(TypeError, () => createLayerFn(large_pixel_height), "viewPixelHeight is too large");
      });

      // Layout cannot be 'default'.
      t.step(() => {
        let invalid_layout = Object.assign({}, valid_init, { layout: 'default' });
        assert_throws_js(TypeError, () => createLayerFn(invalid_layout), "layout is 'default'");
        resolve();
      });
    });
  };

  function testCompositionLayer(xrSession, deviceController, t, { gl, xrBinding, xrSpace }) {
    const valid_init = {
      space: xrSpace,
      viewPixelWidth: 1024,
      viewPixelHeight: 1024
    };
    return Promise.resolve()
      .then(testCommonXRLayerInitErrors(xrBinding.createQuadLayer.bind(xrBinding), valid_init, t, gl))
      .then(testCommonXRLayerInitErrors(xrBinding.createCylinderLayer.bind(xrBinding), valid_init, t, gl))
      .then(testCommonXRLayerInitErrors(xrBinding.createEquirectLayer.bind(xrBinding), valid_init, t, gl));
  }

  // This method tests XRLayerInit parameters, which are common to the Quad,Cylinder and Equirect layers.
  xr_layer_promise_test("Ensure XrWebGLBinding's create layer methods throw the appropriate errors.",
    testCompositionLayer, TRACKED_IMMERSIVE_DEVICE, 'immersive-vr', { requiredFeatures: ['layers'] });
</script>