webXRWebGLLayer.js 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import { WebXRLayerWrapper } from "./webXRLayerWrapper.js";
  2. import { WebXRLayerRenderTargetTextureProvider } from "./webXRRenderTargetTextureProvider.js";
  3. /**
  4. * Wraps xr webgl layers.
  5. * @internal
  6. */
  7. export class WebXRWebGLLayerWrapper extends WebXRLayerWrapper {
  8. /**
  9. * @param layer is the layer to be wrapped.
  10. * @returns a new WebXRLayerWrapper wrapping the provided XRWebGLLayer.
  11. */
  12. constructor(layer) {
  13. super(() => layer.framebufferWidth, () => layer.framebufferHeight, layer, "XRWebGLLayer", (sessionManager) => new WebXRWebGLLayerRenderTargetTextureProvider(sessionManager.scene, this));
  14. this.layer = layer;
  15. }
  16. }
  17. /**
  18. * Provides render target textures and other important rendering information for a given XRWebGLLayer.
  19. * @internal
  20. */
  21. export class WebXRWebGLLayerRenderTargetTextureProvider extends WebXRLayerRenderTargetTextureProvider {
  22. constructor(scene, layerWrapper) {
  23. super(scene, layerWrapper);
  24. this.layerWrapper = layerWrapper;
  25. this._layer = layerWrapper.layer;
  26. this._framebufferDimensions = {
  27. framebufferWidth: this._layer.framebufferWidth,
  28. framebufferHeight: this._layer.framebufferHeight,
  29. };
  30. }
  31. trySetViewportForView(viewport, view) {
  32. const xrViewport = this._layer.getViewport(view);
  33. if (!xrViewport) {
  34. return false;
  35. }
  36. const framebufferWidth = this._framebufferDimensions.framebufferWidth;
  37. const framebufferHeight = this._framebufferDimensions.framebufferHeight;
  38. viewport.x = xrViewport.x / framebufferWidth;
  39. viewport.y = xrViewport.y / framebufferHeight;
  40. viewport.width = xrViewport.width / framebufferWidth;
  41. viewport.height = xrViewport.height / framebufferHeight;
  42. return true;
  43. }
  44. // eslint-disable-next-line @typescript-eslint/no-unused-vars
  45. getRenderTargetTextureForEye(eye) {
  46. const layerWidth = this._layer.framebufferWidth;
  47. const layerHeight = this._layer.framebufferHeight;
  48. const framebuffer = this._layer.framebuffer;
  49. if (!this._rtt ||
  50. layerWidth !== this._framebufferDimensions.framebufferWidth ||
  51. layerHeight !== this._framebufferDimensions.framebufferHeight ||
  52. framebuffer !== this._framebuffer) {
  53. this._rtt = this._createRenderTargetTexture(layerWidth, layerHeight, framebuffer);
  54. this._framebufferDimensions.framebufferWidth = layerWidth;
  55. this._framebufferDimensions.framebufferHeight = layerHeight;
  56. this._framebuffer = framebuffer;
  57. }
  58. return this._rtt;
  59. }
  60. getRenderTargetTextureForView(view) {
  61. return this.getRenderTargetTextureForEye(view.eye);
  62. }
  63. }
  64. //# sourceMappingURL=webXRWebGLLayer.js.map