123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- using UnityEngine.Experimental.Rendering;
-
- namespace UnityEngine.Rendering.Universal
- {
- internal static class XRSystemUniversal
- {
- // Prevent GC by keeping an array pre-allocated
- static Matrix4x4[] s_projMatrix = new Matrix4x4[2];
-
- internal static void BeginLateLatching(Camera camera, XRPassUniversal xrPass)
- {
- #if ENABLE_VR && ENABLE_XR_MODULE
- XR.XRDisplaySubsystem xrDisplay = XRSystem.GetActiveDisplay();
-
- if (xrDisplay != null && xrPass.viewCount == 2) // multiview only
- {
- xrDisplay.BeginRecordingIfLateLatched(camera);
- xrPass.isLateLatchEnabled = true;
- }
- #endif
- }
-
- internal static void EndLateLatching(Camera camera, XRPassUniversal xrPass)
- {
- #if ENABLE_VR && ENABLE_XR_MODULE
- XR.XRDisplaySubsystem xrDisplay = XRSystem.GetActiveDisplay();
-
- if (xrDisplay != null && xrPass.isLateLatchEnabled)
- {
- xrDisplay.EndRecordingIfLateLatched(camera);
- xrPass.isLateLatchEnabled = false;
- }
- #endif
- }
-
- internal static void UnmarkShaderProperties(RasterCommandBuffer cmd, XRPassUniversal xrPass)
- {
- #if ENABLE_VR && ENABLE_XR_MODULE
- if (xrPass.isLateLatchEnabled && xrPass.hasMarkedLateLatch)
- {
- cmd.UnmarkLateLatchMatrix(CameraLateLatchMatrixType.View);
- cmd.UnmarkLateLatchMatrix(CameraLateLatchMatrixType.InverseView);
- cmd.UnmarkLateLatchMatrix(CameraLateLatchMatrixType.ViewProjection);
- cmd.UnmarkLateLatchMatrix(CameraLateLatchMatrixType.InverseViewProjection);
- xrPass.hasMarkedLateLatch = false;
- }
- #endif
- }
-
- internal static void MarkShaderProperties(RasterCommandBuffer cmd, XRPassUniversal xrPass, bool renderIntoTexture)
- {
- #if ENABLE_VR && ENABLE_XR_MODULE
- if (xrPass.isLateLatchEnabled && xrPass.canMarkLateLatch)
- {
- cmd.MarkLateLatchMatrixShaderPropertyID(CameraLateLatchMatrixType.View, XRBuiltinShaderConstants.unity_StereoMatrixV);
- cmd.MarkLateLatchMatrixShaderPropertyID(CameraLateLatchMatrixType.InverseView, XRBuiltinShaderConstants.unity_StereoMatrixInvV);
- cmd.MarkLateLatchMatrixShaderPropertyID(CameraLateLatchMatrixType.ViewProjection, XRBuiltinShaderConstants.unity_StereoMatrixVP);
- cmd.MarkLateLatchMatrixShaderPropertyID(CameraLateLatchMatrixType.InverseViewProjection, XRBuiltinShaderConstants.unity_StereoMatrixInvVP);
-
- for (int viewIndex = 0; viewIndex < 2; ++viewIndex)
- s_projMatrix[viewIndex] = GL.GetGPUProjectionMatrix(xrPass.GetProjMatrix(viewIndex), renderIntoTexture);
-
- cmd.SetLateLatchProjectionMatrices(s_projMatrix);
- xrPass.hasMarkedLateLatch = true;
- }
- #endif
- }
- }
- }
|