@@ -9462,7 +9462,7 @@ __webpack_require__.r(__webpack_exports__);
94629462/* harmony import */ var three__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! three */ "./node_modules/three/build/three.core.js");
94639463/* harmony import */ var _core_component_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/component.js */ "./src/core/component.js");
94649464/* harmony import */ var _utils_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/index.js */ "./src/utils/index.js");
9465- /* global XRRigidTransform, XRWebGLBinding */
9465+ /* global XRMediaBinding, XRRigidTransform, XRWebGLBinding */
94669466
94679467
94689468
@@ -9487,12 +9487,9 @@ var Component = (0,_core_component_js__WEBPACK_IMPORTED_MODULE_0__.registerCompo
94879487 }
94889488 },
94899489 init: function () {
9490- var gl = this.el.sceneEl.renderer.getContext();
94919490 this.quaternion = new three__WEBPACK_IMPORTED_MODULE_2__.Quaternion();
94929491 this.position = new three__WEBPACK_IMPORTED_MODULE_2__.Vector3();
94939492 this.bindMethods();
9494- this.needsRedraw = false;
9495- this.frameBuffer = gl.createFramebuffer();
94969493 var webxrData = this.el.sceneEl.getAttribute('webxr');
94979494 var requiredFeaturesArray = webxrData.requiredFeatures;
94989495 if (requiredFeaturesArray.indexOf('layers') === -1) {
@@ -9514,7 +9511,9 @@ var Component = (0,_core_component_js__WEBPACK_IMPORTED_MODULE_0__.registerCompo
95149511 },
95159512 updateSrc: function () {
95169513 var type = this.data.type;
9514+ this.destroyLayer();
95179515 this.texture = undefined;
9516+ this.textureIsVideo = this.data.src.tagName === 'VIDEO';
95189517 if (type === 'quad') {
95199518 this.loadQuadImage();
95209519 return;
@@ -9565,16 +9564,6 @@ var Component = (0,_core_component_js__WEBPACK_IMPORTED_MODULE_0__.registerCompo
95659564 }, function textureLoaded(texture) {
95669565 self.el.sceneEl.renderer.initTexture(texture);
95679566 self.texture = texture;
9568- if (src.tagName === 'VIDEO') {
9569- setTimeout(function () {
9570- self.textureIsVideo = true;
9571- }, 1000);
9572- }
9573- if (self.layer) {
9574- self.layer.height = self.data.height / 2 || self.texture.image.height / 1000;
9575- self.layer.width = self.data.width / 2 || self.texture.image.width / 1000;
9576- self.needsRedraw = true;
9577- }
95789567 self.updateQuadPanel();
95799568 });
95809569 },
@@ -9683,13 +9672,15 @@ var Component = (0,_core_component_js__WEBPACK_IMPORTED_MODULE_0__.registerCompo
96839672 if (this.data.src.complete && (this.pendingCubeMapUpdate || this.loadingScreen || this.visibilityChanged)) {
96849673 this.loadCubeMapImages();
96859674 }
9686- if (!this.needsRedraw && !this.layer.needsRedraw && !this.textureIsVideo) {
9675+ if (!this.layer.needsRedraw) {
9676+ return;
9677+ }
9678+ if (this.textureIsVideo) {
96879679 return;
96889680 }
96899681 if (this.data.type === 'quad') {
96909682 this.draw();
96919683 }
9692- this.needsRedraw = false;
96939684 },
96949685 initLayer: function () {
96959686 var self = this;
@@ -9707,19 +9698,27 @@ var Component = (0,_core_component_js__WEBPACK_IMPORTED_MODULE_0__.registerCompo
97079698 }
97089699 },
97099700 initQuadLayer: function () {
9710- var sceneEl = this.el.sceneEl;
9711- var gl = sceneEl.renderer.getContext();
9712- var xrGLFactory = this.xrGLFactory = new XRWebGLBinding(sceneEl.xrSession, gl);
97139701 if (!this.texture) {
97149702 return;
97159703 }
9716- this.layer = xrGLFactory.createQuadLayer({
9717- space: this.referenceSpace,
9718- viewPixelHeight: 2048,
9719- viewPixelWidth: 2048,
9720- height: this.data.height / 2 || this.texture.image.height / 1000,
9721- width: this.data.width / 2 || this.texture.image.width / 1000
9722- });
9704+ var sceneEl = this.el.sceneEl;
9705+ if (this.textureIsVideo) {
9706+ var mediaBinding = new XRMediaBinding(sceneEl.xrSession);
9707+ this.layer = mediaBinding.createQuadLayer(this.data.src, {
9708+ space: this.referenceSpace,
9709+ height: this.data.height / 2 || this.texture.image.height / 1000,
9710+ width: this.data.width / 2 || this.texture.image.width / 1000
9711+ });
9712+ } else {
9713+ var xrGLFactory = this.xrGLFactory = sceneEl.renderer.xr.getBinding();
9714+ this.layer = xrGLFactory.createQuadLayer({
9715+ space: this.referenceSpace,
9716+ viewPixelHeight: this.texture.image.height,
9717+ viewPixelWidth: this.texture.image.width,
9718+ height: this.data.height / 2 || this.texture.image.height / 1000,
9719+ width: this.data.width / 2 || this.texture.image.width / 1000
9720+ });
9721+ }
97239722 sceneEl.renderer.xr.addLayer(this.layer);
97249723 },
97259724 initCubeMapLayer: function () {
@@ -9728,7 +9727,7 @@ var Component = (0,_core_component_js__WEBPACK_IMPORTED_MODULE_0__.registerCompo
97289727 var gl = sceneEl.renderer.getContext();
97299728 var glSizeLimit = gl.getParameter(gl.MAX_CUBE_MAP_TEXTURE_SIZE);
97309729 var cubeFaceSize = this.cubeFaceSize = Math.min(glSizeLimit, Math.min(src.width, src.height));
9731- var xrGLFactory = this.xrGLFactory = new XRWebGLBinding( sceneEl.xrSession, gl );
9730+ var xrGLFactory = this.xrGLFactory = sceneEl.renderer.xr.getBinding( );
97329731 this.layer = xrGLFactory.createCubeLayer({
97339732 space: this.referenceSpace,
97349733 viewPixelWidth: cubeFaceSize,
@@ -9796,16 +9795,14 @@ var Component = (0,_core_component_js__WEBPACK_IMPORTED_MODULE_0__.registerCompo
97969795 });
97979796 },
97989797 draw: function () {
9799- var sceneEl = this.el.sceneEl;
98009798 var gl = this.el.sceneEl.renderer.getContext();
9799+ var sceneEl = this.el.sceneEl;
9800+ var textureEl = this.data.src;
98019801 var glayer = this.xrGLFactory.getSubImage(this.layer, sceneEl.frame);
9802- var texture = sceneEl.renderer.properties.get(this.texture).__webglTexture;
9803- var previousFrameBuffer = gl.getParameter(gl.FRAMEBUFFER_BINDING);
9804- gl.viewport(glayer.viewport.x, glayer.viewport.y, glayer.viewport.width, glayer.viewport.height);
9805- gl.bindFramebuffer(gl.FRAMEBUFFER, this.frameBuffer);
9806- gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, glayer.colorTexture, 0);
9807- blitTexture(gl, texture, glayer, this.data.src);
9808- gl.bindFramebuffer(gl.FRAMEBUFFER, previousFrameBuffer);
9802+ gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true);
9803+ gl.bindTexture(gl.TEXTURE_2D, glayer.colorTexture);
9804+ gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, textureEl.width, textureEl.height, gl.RGBA, gl.UNSIGNED_BYTE, textureEl);
9805+ gl.bindTexture(gl.TEXTURE_2D, null);
98099806 },
98109807 updateTransform: function () {
98119808 var el = this.el;
@@ -9845,29 +9842,6 @@ var Component = (0,_core_component_js__WEBPACK_IMPORTED_MODULE_0__.registerCompo
98459842 this.referenceSpace = referenceSpace;
98469843 }
98479844});
9848- function blitTexture(gl, texture, subImage, textureEl) {
9849- var xrReadFramebuffer = gl.createFramebuffer();
9850- var x1offset = subImage.viewport.x;
9851- var y1offset = subImage.viewport.y;
9852- var x2offset = subImage.viewport.x + subImage.viewport.width;
9853- var y2offset = subImage.viewport.y + subImage.viewport.height;
9854-
9855- // Update video texture.
9856- if (textureEl.tagName === 'VIDEO') {
9857- gl.bindTexture(gl.TEXTURE_2D, texture);
9858- gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, textureEl.width, textureEl.height, gl.RGB, gl.UNSIGNED_BYTE, textureEl);
9859- }
9860-
9861- // Bind texture to read framebuffer.
9862- gl.bindFramebuffer(gl.READ_FRAMEBUFFER, xrReadFramebuffer);
9863- gl.framebufferTexture2D(gl.READ_FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0);
9864-
9865- // Blit into layer buffer.
9866- gl.readBuffer(gl.COLOR_ATTACHMENT0);
9867- gl.blitFramebuffer(0, 0, textureEl.width, textureEl.height, x1offset, y1offset, x2offset, y2offset, gl.COLOR_BUFFER_BIT, gl.NEAREST);
9868- gl.bindFramebuffer(gl.READ_FRAMEBUFFER, null);
9869- gl.deleteFramebuffer(xrReadFramebuffer);
9870- }
98719845
98729846/***/ }),
98739847
@@ -60848,7 +60822,7 @@ if (_utils_index_js__WEBPACK_IMPORTED_MODULE_16__.device.isBrowserEnvironment) {
6084860822 window.logs = debug;
6084960823 __webpack_require__(/*! ./style/aframe.css */ "./src/style/aframe.css");
6085060824}
60851- console.log('A-Frame Version: 1.7.1 (Date 2025-04-28 , Commit #e947d42d )');
60825+ console.log('A-Frame Version: 1.7.1 (Date 2025-04-29 , Commit #a5927371 )');
6085260826console.log('THREE Version (https://github.com/supermedium/three.js):', _lib_three_js__WEBPACK_IMPORTED_MODULE_1__["default"].REVISION);
6085360827
6085460828// Wait for ready state, unless user asynchronously initializes A-Frame.
0 commit comments