A game about forced loneliness, made by TACStudios
2
fork

Configure Feed

Select the types of activity you want to include in your feed.

at master 136 lines 4.6 kB view raw
1#if ENABLE_VR && ENABLE_XR_MODULE 2using System; 3using System.Collections; 4using System.Collections.Generic; 5using NUnit.Framework; 6using UnityEngine; 7using UnityEngine.TestTools; 8using UnityEngine.Experimental.Rendering; 9using UnityEngine.XR; 10 11namespace UnityEngine.Rendering.Tests 12{ 13 class XRDisplaySubsystemCoreTests 14 { 15 // Utils 16 protected IEnumerator WaitOneFrame() 17 { 18 yield return null; 19 } 20 21 Camera m_Camera; 22 XRDisplaySubsystem m_XRDisplay; 23 private RenderPipelineAsset m_RenderPipelineAsset; 24 25 [SetUp] 26 public void Setup() 27 { 28 var camObj = new GameObject(); 29 camObj.AddComponent<Camera>(); 30 m_Camera = camObj.GetComponent<Camera>(); 31 camObj.tag = "MainCamera"; 32 33 var displays = new List<XRDisplaySubsystem>(); 34 SubsystemManager.GetSubsystems(displays); 35 36 // Skip tests 37 if (displays.Count == 0) 38 Assert.Ignore("No active XR provider found, skipping XRSystem core tests."); 39 40 m_XRDisplay = displays[0]; 41 } 42 43 [TearDown] 44 public void TearDown() 45 { 46 if (m_Camera) 47 { 48 Object.Destroy(m_Camera.gameObject); 49 } 50 } 51 52 [UnityTest] 53 public IEnumerator SetOcclusionMeshScaleTest() 54 { 55 XRSRPSettings.occlusionMeshScale = 1.0f; 56 yield return WaitOneFrame(); 57 58 // Set scale 59 float targetScale = 0.5f; 60 XRSRPSettings.occlusionMeshScale = targetScale; 61 yield return WaitOneFrame(); 62 63 // Examine XRPass 64 float occlusionScale = 0; 65 var xrLayout = XRSystem.NewLayout(); 66 xrLayout.AddCamera(m_Camera, true); 67 if (xrLayout.GetActivePasses().Count > 0) 68 { 69 (Camera _, XRPass xrPass) = xrLayout.GetActivePasses()[0]; 70 { 71 occlusionScale = xrPass.occlusionMeshScale; 72 } 73 } 74 Assert.AreEqual(targetScale, occlusionScale); 75 yield return WaitOneFrame(); 76 77 // Reset to default 1.0f 78 XRSRPSettings.occlusionMeshScale = 1.0f; 79 yield return WaitOneFrame(); 80 } 81 82 [UnityTest] 83 public IEnumerator SetMirrorViewModeTest() 84 { 85 XRSRPSettings.mirrorViewMode = XRMirrorViewBlitMode.SideBySide; 86 yield return WaitOneFrame(); 87 // Check XRDisplay mirror blit mode 88 int mirrorBlitMode = m_XRDisplay.GetPreferredMirrorBlitMode(); 89 Assert.AreEqual(mirrorBlitMode, XRMirrorViewBlitMode.SideBySide); 90 91 // Repeat for Left mode 92 XRSRPSettings.mirrorViewMode = XRMirrorViewBlitMode.LeftEye; 93 yield return WaitOneFrame(); 94 // Check XRDisplay mirror blit mode 95 mirrorBlitMode = m_XRDisplay.GetPreferredMirrorBlitMode(); 96 Assert.AreEqual(mirrorBlitMode, XRMirrorViewBlitMode.LeftEye); 97 } 98 99 [UnityTest] 100 public IEnumerator CalculateViewCornersTest() 101 { 102 yield return WaitOneFrame(); 103 104 // Retrieve XRPass 105 var xrLayout = XRSystem.NewLayout(); 106 xrLayout.AddCamera(m_Camera, true); 107 XRPass firstPass = XRSystem.emptyPass; 108 if (xrLayout.GetActivePasses().Count > 0) 109 { 110 (Camera _, XRPass xrPass) = xrLayout.GetActivePasses()[0]; 111 { 112 firstPass = xrPass; 113 } 114 } 115 116 // z 0 case: all corners should be zero 117 float z0 = 0; 118 Vector3[] corners = CoreUtils.CalculateViewSpaceCorners(firstPass.GetProjMatrix(0), z0); 119 Assert.AreEqual(Vector3.zero, corners[0]); 120 Assert.AreEqual(Vector3.zero, corners[1]); 121 Assert.AreEqual(Vector3.zero, corners[2]); 122 Assert.AreEqual(Vector3.zero, corners[3]); 123 124 // z2 corners = z1 corners * z2/z1 125 float z1 = 1; 126 float z2 = 2; 127 Vector3[] cornersZ1 = CoreUtils.CalculateViewSpaceCorners(firstPass.GetProjMatrix(0), z1 /*z*/); 128 Vector3[] cornersZ2 = CoreUtils.CalculateViewSpaceCorners(firstPass.GetProjMatrix(0), z2 /*z*/); 129 Assert.AreEqual(cornersZ1[0] * z2 / z1, cornersZ2[0]); 130 Assert.AreEqual(cornersZ1[1] * z2 / z1, cornersZ2[1]); 131 Assert.AreEqual(cornersZ1[2] * z2 / z1, cornersZ2[2]); 132 Assert.AreEqual(cornersZ1[3] * z2 / z1, cornersZ2[3]); 133 } 134 } 135} 136#endif