// Used for camera stacking where we need to update the parameters per camera internal void UpdateFromCamera(ref XRPass xrPass, Camera camera) { if (xrPass.enabled && display != null) { display.GetRenderPass(xrPass.multipassId, out var renderPass); display.GetCullingParameters(camera, renderPass.cullingPassIndex, out var cullingParams); // Disable legacy stereo culling path cullingParams.cullingOptions &= ~CullingOptions.Stereo; if (xrPass.singlePassEnabled) { xrPass = XRPass.Create(renderPass, multipassId: xrPass.multipassId, cullingParams, occlusionMeshMaterial); for (int renderParamIndex = 0; renderParamIndex < renderPass.GetRenderParameterCount(); ++renderParamIndex) { renderPass.GetRenderParameter(camera, renderParamIndex, out var renderParam); xrPass.AddView(renderPass, renderParam); } } else { renderPass.GetRenderParameter(camera, 0, out var renderParam); xrPass = XRPass.Create(renderPass, multipassId: xrPass.multipassId, cullingParams, occlusionMeshMaterial); xrPass.AddView(renderPass, renderParam); } } }
void CreateLayoutFromXrSdk(Camera camera, bool singlePassAllowed) { bool CanUseSinglePass(XRDisplaySubsystem.XRRenderPass renderPass) { if (renderPass.renderTargetDesc.dimension != TextureDimension.Tex2DArray) { return(false); } if (renderPass.GetRenderParameterCount() != 2 || renderPass.renderTargetDesc.volumeDepth != 2) { return(false); } renderPass.GetRenderParameter(camera, 0, out var renderParam0); renderPass.GetRenderParameter(camera, 1, out var renderParam1); if (renderParam0.textureArraySlice != 0 || renderParam1.textureArraySlice != 1) { return(false); } if (renderParam0.viewport != renderParam1.viewport) { return(false); } return(true); } for (int renderPassIndex = 0; renderPassIndex < display.GetRenderPassCount(); ++renderPassIndex) { display.GetRenderPass(renderPassIndex, out var renderPass); display.GetCullingParameters(camera, renderPass.cullingPassIndex, out var cullingParams); // Disable legacy stereo culling path cullingParams.cullingOptions &= ~CullingOptions.Stereo; if (singlePassAllowed && CanUseSinglePass(renderPass)) { var xrPass = XRPass.Create(renderPass, multipassId: framePasses.Count, cullingParams, occlusionMeshMaterial); for (int renderParamIndex = 0; renderParamIndex < renderPass.GetRenderParameterCount(); ++renderParamIndex) { renderPass.GetRenderParameter(camera, renderParamIndex, out var renderParam); xrPass.AddView(renderPass, renderParam); } AddPassToFrame(xrPass); } else { for (int renderParamIndex = 0; renderParamIndex < renderPass.GetRenderParameterCount(); ++renderParamIndex) { renderPass.GetRenderParameter(camera, renderParamIndex, out var renderParam); var xrPass = XRPass.Create(renderPass, multipassId: framePasses.Count, cullingParams, occlusionMeshMaterial); xrPass.AddView(renderPass, renderParam); AddPassToFrame(xrPass); } } } }