-
-
Notifications
You must be signed in to change notification settings - Fork 35.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
WebGL context must be marked as XR compatible in order to use with an immersive XRSession #20715
Comments
Does await gl.makeXRCompatible(); |
If however you will change session.addEventListener( 'inputsourceschange', updateInputSources );
await session.requestReferenceSpace( referenceSpaceType );
onRequestReferenceSpace(); instead of this: session.updateRenderState( { baseLayer: baseLayer } );
session.requestReferenceSpace( referenceSpaceType ).then( onRequestReferenceSpace );
//
session.addEventListener( 'inputsourceschange', updateInputSources ); XRSession.requestReferenceSpace does return a In general, we don't have to detect when the session is ready because we are getting the In case it's not ready the |
@toji what do you think? |
Is there a significant overhead in makeXRCompatible()? |
Some context: #19275 |
The suggested code change for |
It may cause context loss/restore, primarily on multi-GPU devices. That probably qualifies as "significant overhead"
You don't want to do it blindly because it could cause inappropriate GPU switches for non-XR pages that don't require it. I do think that it should be something that can be requested when creating the renderer, though, because if you know the page will be displaying XR content that's the less disruptive path. |
Thank you for the clarification, makes complete sense. |
I get the same error on all the WebXR AR examples (cones, hittest and paint), I can't run any of them currently.
|
Just upgraded to Chrome 88.0.4324.96 & I'm facing this issue starting a WebXR session in 𝚕̶𝚘̶𝚌̶𝚊̶𝚕̶𝚑̶𝚘̶𝚜̶𝚝̶ testing. Windows 10 64, Oculus Rift CV1 Correction: This is broken when loading the examples from the server too. As of updating to Chrome 88, I can no longer view ThreeJS-VR in Chrome. I can however still enter WebXR at https://immersive-web.github.io/webxr-samples/ ThreeJS Examples are working fine in Microsoft Edge. |
At the moment it has an error loading the WebXR context for some reason. The error is like this one in the Three.js issue tracker: mrdoob/three.js#20715
When calling
WebXRManager.setSession( value )
you sometimes might get this message:Uncaught (in promise) DOMException: Failed to construct 'XRWebGLLayer': WebGL context must be marked as XR compatible in order to use with an immersive XRSession
To Reproduce
I am able to reproduce the issue only on my localhost environment. When serving my viewer from the server it's working fine.
The reason for this issue is a racing condition.
when creating an instance of
XRWebGLLayer
the WebGL context(gl)
should already be XR compatible enabled.The
gl.makeXRCompatible()
function returns aPromise
.Current setSession Code
Suggested setSession Code
Screenshots
![image](https://user-images.githubusercontent.com/3777546/99661791-06463b80-2a6d-11eb-9283-ce7f80ab8ea6.png)
Platform:
I can create a pull request myself, I just remember that the way to do is on this repo isn't so straghtfarward.
Fork dev?
Build and then push?
If someone wants to do it be my guest. If not, please provide a link or explains how to do it right.
Thanks.
The text was updated successfully, but these errors were encountered: