nativeXRRenderTarget.js 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import { WebXRLayerWrapper } from "../webXRLayerWrapper.js";
  2. import { WebXRLayerRenderTargetTextureProvider } from "../webXRRenderTargetTextureProvider.js";
  3. /**
  4. * Wraps XRWebGLLayer's created by Babylon Native.
  5. * @internal
  6. */
  7. export class NativeXRLayerWrapper extends WebXRLayerWrapper {
  8. constructor(layer) {
  9. super(() => layer.framebufferWidth, () => layer.framebufferHeight, layer, "XRWebGLLayer", (sessionManager) => new NativeXRLayerRenderTargetTextureProvider(sessionManager, this));
  10. this.layer = layer;
  11. }
  12. }
  13. /**
  14. * Provides render target textures for layers created by Babylon Native.
  15. * @internal
  16. */
  17. export class NativeXRLayerRenderTargetTextureProvider extends WebXRLayerRenderTargetTextureProvider {
  18. constructor(sessionManager, layerWrapper) {
  19. super(sessionManager.scene, layerWrapper);
  20. this.layerWrapper = layerWrapper;
  21. this._nativeRTTProvider = navigator.xr.getNativeRenderTargetProvider(sessionManager.session, this._createRenderTargetTexture.bind(this), this._destroyRenderTargetTexture.bind(this));
  22. this._nativeLayer = layerWrapper.layer;
  23. }
  24. trySetViewportForView(viewport) {
  25. viewport.x = 0;
  26. viewport.y = 0;
  27. viewport.width = 1;
  28. viewport.height = 1;
  29. return true;
  30. }
  31. getRenderTargetTextureForEye(eye) {
  32. // TODO (rgerd): Update the contract on the BabylonNative side to call this "getRenderTargetTextureForEye"
  33. return this._nativeRTTProvider.getRenderTargetForEye(eye);
  34. }
  35. getRenderTargetTextureForView(view) {
  36. return this._nativeRTTProvider.getRenderTargetForEye(view.eye);
  37. }
  38. getFramebufferDimensions() {
  39. return {
  40. framebufferWidth: this._nativeLayer.framebufferWidth,
  41. framebufferHeight: this._nativeLayer.framebufferHeight,
  42. };
  43. }
  44. }
  45. /**
  46. * Creates the xr layer that will be used as the xr session's base layer.
  47. * @internal
  48. */
  49. export class NativeXRRenderTarget {
  50. constructor(_xrSessionManager) {
  51. this._nativeRenderTarget = navigator.xr.getWebXRRenderTarget(_xrSessionManager.scene.getEngine());
  52. }
  53. async initializeXRLayerAsync(xrSession) {
  54. await this._nativeRenderTarget.initializeXRLayerAsync(xrSession);
  55. this.xrLayer = this._nativeRenderTarget.xrLayer;
  56. return this.xrLayer;
  57. }
  58. dispose() {
  59. /* empty */
  60. }
  61. }
  62. //# sourceMappingURL=nativeXRRenderTarget.js.map