Няма описание
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

XRSystemUniversal.cs 2.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. using UnityEngine.Experimental.Rendering;
  2. namespace UnityEngine.Rendering.Universal
  3. {
  4. internal static class XRSystemUniversal
  5. {
  6. // Prevent GC by keeping an array pre-allocated
  7. static Matrix4x4[] s_projMatrix = new Matrix4x4[2];
  8. internal static void BeginLateLatching(Camera camera, XRPassUniversal xrPass)
  9. {
  10. #if ENABLE_VR && ENABLE_XR_MODULE
  11. XR.XRDisplaySubsystem xrDisplay = XRSystem.GetActiveDisplay();
  12. if (xrDisplay != null && xrPass.viewCount == 2) // multiview only
  13. {
  14. xrDisplay.BeginRecordingIfLateLatched(camera);
  15. xrPass.isLateLatchEnabled = true;
  16. }
  17. #endif
  18. }
  19. internal static void EndLateLatching(Camera camera, XRPassUniversal xrPass)
  20. {
  21. #if ENABLE_VR && ENABLE_XR_MODULE
  22. XR.XRDisplaySubsystem xrDisplay = XRSystem.GetActiveDisplay();
  23. if (xrDisplay != null && xrPass.isLateLatchEnabled)
  24. {
  25. xrDisplay.EndRecordingIfLateLatched(camera);
  26. xrPass.isLateLatchEnabled = false;
  27. }
  28. #endif
  29. }
  30. internal static void UnmarkShaderProperties(RasterCommandBuffer cmd, XRPassUniversal xrPass)
  31. {
  32. #if ENABLE_VR && ENABLE_XR_MODULE
  33. if (xrPass.isLateLatchEnabled && xrPass.hasMarkedLateLatch)
  34. {
  35. cmd.UnmarkLateLatchMatrix(CameraLateLatchMatrixType.View);
  36. cmd.UnmarkLateLatchMatrix(CameraLateLatchMatrixType.InverseView);
  37. cmd.UnmarkLateLatchMatrix(CameraLateLatchMatrixType.ViewProjection);
  38. cmd.UnmarkLateLatchMatrix(CameraLateLatchMatrixType.InverseViewProjection);
  39. xrPass.hasMarkedLateLatch = false;
  40. }
  41. #endif
  42. }
  43. internal static void MarkShaderProperties(RasterCommandBuffer cmd, XRPassUniversal xrPass, bool renderIntoTexture)
  44. {
  45. #if ENABLE_VR && ENABLE_XR_MODULE
  46. if (xrPass.isLateLatchEnabled && xrPass.canMarkLateLatch)
  47. {
  48. cmd.MarkLateLatchMatrixShaderPropertyID(CameraLateLatchMatrixType.View, XRBuiltinShaderConstants.unity_StereoMatrixV);
  49. cmd.MarkLateLatchMatrixShaderPropertyID(CameraLateLatchMatrixType.InverseView, XRBuiltinShaderConstants.unity_StereoMatrixInvV);
  50. cmd.MarkLateLatchMatrixShaderPropertyID(CameraLateLatchMatrixType.ViewProjection, XRBuiltinShaderConstants.unity_StereoMatrixVP);
  51. cmd.MarkLateLatchMatrixShaderPropertyID(CameraLateLatchMatrixType.InverseViewProjection, XRBuiltinShaderConstants.unity_StereoMatrixInvVP);
  52. for (int viewIndex = 0; viewIndex < 2; ++viewIndex)
  53. s_projMatrix[viewIndex] = GL.GetGPUProjectionMatrix(xrPass.GetProjMatrix(viewIndex), renderIntoTexture);
  54. cmd.SetLateLatchProjectionMatrices(s_projMatrix);
  55. xrPass.hasMarkedLateLatch = true;
  56. }
  57. #endif
  58. }
  59. }
  60. }