mirror of
https://github.com/FlipsideCrypto/DefinitelyTyped.git
synced 2026-02-06 10:56:53 +00:00
* First run at adding webxr types * fixing some tests * few more fixes * more test fixes * Fixing some more linting bits * More lint fixes * Trying to remove empty interface * Running prettier * Adding disable next line instead of new rule * one more disable next line * Updating from a slightly older version :-/ * adding typescript version * is this after the header? * Prettier * Adding example * Prettier * Referencing the test file * File name * ... and the file name reference :-/ * Moar build server * Last try. * Just touching a file so the pipeline kicks off again. * Putting url back to kick build off again.
62 lines
1.5 KiB
TypeScript
62 lines
1.5 KiB
TypeScript
import {
|
|
XRWebGLLayer,
|
|
XRSession,
|
|
XRSystem,
|
|
XRRenderStateInit,
|
|
XRReferenceSpace,
|
|
XRFrame,
|
|
XRViewerPose,
|
|
XRRigidTransform,
|
|
XRView,
|
|
XRViewPort,
|
|
} from 'webxr';
|
|
|
|
const canvas = document.createElement('canvas');
|
|
const ctx: WebGLRenderingContext | null = canvas.getContext('webgl');
|
|
|
|
const xr = (navigator as any)?.xr as XRSystem;
|
|
if (!xr) {
|
|
throw Error('You do not have WebXR');
|
|
}
|
|
|
|
let space: XRReferenceSpace;
|
|
let layer: XRWebGLLayer;
|
|
const startRot = new DOMPoint(0, 0, 0, 1);
|
|
const startSpot = new DOMPoint(0, 0, 0, 1);
|
|
xr.requestSession('immersive-vr').then((session: XRSession) => {
|
|
if (ctx) {
|
|
layer = new XRWebGLLayer(session, ctx);
|
|
const init: XRRenderStateInit = {
|
|
baseLayer: layer,
|
|
depthFar: 800,
|
|
depthNear: 0.01,
|
|
inlineVerticalFieldOfView: 1,
|
|
};
|
|
session.updateRenderState(init);
|
|
|
|
session
|
|
.requestReferenceSpace('local')
|
|
.then(rs => {
|
|
space = rs as XRReferenceSpace;
|
|
})
|
|
.catch(e => {
|
|
throw Error("Can't get reference space" + e);
|
|
});
|
|
}
|
|
});
|
|
|
|
const renderFrame = (frame: XRFrame) => {
|
|
const tf = new XRRigidTransform(startSpot, startRot);
|
|
space = space.getOffsetReferenceSpace(tf);
|
|
|
|
const pose: XRViewerPose = frame.getViewerPose(space);
|
|
|
|
if (pose) {
|
|
let view: XRView;
|
|
for (view of pose.views) {
|
|
const viewport: XRViewPort = layer.getViewport(view);
|
|
// draw to the device eyes
|
|
}
|
|
}
|
|
};
|