v0.4.0
What's Changed
- feat: add size render prop by @CodyJasonBennett in #38
- feat(core): add xr manager, render mode switching by @CodyJasonBennett in #39
- chore: cleanup build config, drop expo peer dep by @CodyJasonBennett in 90974e9
- chore: add ogl node/ssr solutions to readme by @CodyJasonBennett in afa201c
Size prop
Adds a size render prop to mirror R3F's API for sizing, this is handled by the <Canvas /> component. This can be subscribed to via useOGL:
const size = useOGL(state => state.size)
console.log(size.width, size.height)WebXR support
Adds support for WebXR rendering via an XRManager:
XRManager {
session: XRSession | null
setSession(session: XRSession | null): void
connect(session: XRSession): void
disconnect(): void
}
//
const renderer = useOGL(state => state.renderer)
const xr = useOGL(state => state.xr)
useEffect(() => {
let mounted = true
(async () => {
const session = await navigator.xr.requestSession('immersive-vr', {
optionalFeatures: ['local-floor', 'bounded-floor', 'hand-tracking'],
})
session.updateRenderState({ baseLayer: new XRWebGLLayer(session, renderer.gl) })
if (!mounted) return session.end()
else xr.connect(session)
})()
return () => {
mounted = false
xr.disconnect()
}
}, [renderer, xr])This will augment useFrame subscriptions to access an XRFrame while in a session:
useFrame((state: RootState, time: number, frame?: XRFrame) => {
// ...
})Full Changelog: v0.3.7...v0.4.0