Skip to content

The WebGL context was not marked as XR , when creating a medialayer in Oculus Browser #31029

Open
@danrossi

Description

@danrossi

Description

I am attempting to setup a createEquirectLayer media layer after XR session creation for Quest headsets. However I am seeing two faults and don't know where to report.

The first the browser is complaining makeXRCompatible isn't set even when called a second time. And then I get context loss which stops the session. On my integration it will stop the session automatically. On the test a timeout may prevent context loss.

Reproduction steps

  1. Start XR Session

Code

renderer.xr.addEventListener("sessionstart", async () => {
					const session = renderer.xr.getSession();
					

					if (XRMediaBinding !== undefined) {

                        await renderer.backend.makeXRCompatible();

                        mesh1.layers.disableAll();
			mesh2.layers.disableAll();

                        setTimeout(() => {
                            
                        //180
                        let angle = Math.PI;
                        
                        //360
                        angle = Math.PI*2;

						const mediaBinding = new XRMediaBinding( session );
						const equirectLayer = mediaBinding.createEquirectLayer(
							video,
							{
								space: renderer.xr.getReferenceSpace(),
								layout: 'stereo-left-right',
                                centralHorizontalAngle: angle, 
								//layout: 'stereo-top-bottom',
								// Rotate by 45 deg to avoid stereo conflict with the 3D geometry.
								transform: new XRRigidTransform(
									{},
									{ x: 0, y: .28, z: 0, w: .96 }
								)
							}
						);

						session.updateRenderState( {
							layers: [
								equirectLayer,
								...session.renderState.layers
							]
						});
                        }, 500);

					}

					if (session.supportedFrameRates) {
						console.log("supported framerates ", session.supportedFrameRates);
						session.addEventListener('frameratechange', (event) => {
							console.log("XRFrame rate is now " + session.frameRate)
						});

						session.updateTargetFrameRate(session.supportedFrameRates[session.supportedFrameRates.length - 1]).then((() => {
								
						})).catch(console.warn)
					}

					

				
				});

Live example

Screenshots

Image

Version

r176

Device

Headset

Browser

Chrome

OS

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions