Skip to content

Commit 9f31b9f

Browse files
authored
Merge pull request #234 from mutantdeveloper/support-texture-array
Support texture-array in projection layer sample
2 parents 1a73d41 + bac091a commit 9f31b9f

File tree

2 files changed

+22
-1
lines changed

2 files changed

+22
-1
lines changed

js/render/scenes/scene.js

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -246,8 +246,27 @@ export class Scene extends Node {
246246
xrlayer = layer ? layer : session.renderState.layers[0];
247247
gl.bindFramebuffer(gl.FRAMEBUFFER, renderer.xrFramebuffer);
248248

249+
// We need to do something different with texture-array.
250+
if (xrlayer.usingTextureArray ?? false) {
251+
var viewIndex = 0;
252+
for (let view of pose.views) {
253+
let glLayer = renderer.getXrBinding(session).getViewSubImage(xrlayer, view);
254+
gl.framebufferTextureLayer(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, glLayer.colorTexture, 0, viewIndex);
255+
gl.framebufferTextureLayer(gl.FRAMEBUFFER, gl.DEPTH_ATTACHMENT, glLayer.depthStencilTexture, 0, viewIndex);
256+
257+
views = [new WebXRView(view, glLayer, glLayer.viewport)];
258+
if (this.clear) {
259+
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
260+
}
261+
this.drawViewArray(views, depthData);
262+
263+
++viewIndex;
264+
}
265+
return;
266+
}
267+
249268
for (let view of pose.views) {
250-
let glLayer = renderer.getXrBinding(session).getViewSubImage(xrlayer, view);
269+
let glLayer = renderer.getXrBinding(session).getViewSubImage(xrlayer, view);
251270

252271
if (view == pose.views[0]) {
253272
if (renderer.multisampledMultiview) {

layers-samples/proj-layer.html

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,8 @@
155155
proj_layer = xrGLFactory.createProjectionLayer({
156156
textureType: usingTextureArray ? 'texture-array' : 'texture',
157157
space: refSpace, stencil: false });
158+
// Add a custom attribute to the layer.
159+
proj_layer.usingTextureArray = usingTextureArray;
158160
session.updateRenderState({ layers: [proj_layer] });
159161

160162
session.requestAnimationFrame(onXRFrame);

0 commit comments

Comments
 (0)