Ingen beskrivning
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.

RenderTextureDescriptorDimensionsTests.cs 4.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. using System.Collections.Generic;
  2. using NUnit.Framework;
  3. using UnityEngine;
  4. using UnityEngine.Rendering.Universal;
  5. namespace UnityEditor.Rendering.Universal.Tests
  6. {
  7. [TestFixture]
  8. class RenderTextureDescriptorDimensionsTests
  9. {
  10. private Camera m_Camera;
  11. private UniversalCameraData m_CameraData;
  12. public RenderTexture m_RT;
  13. public class RenderScaleTestCase
  14. {
  15. public float renderScale { get; }
  16. public bool cameraTargetIsRenderTexture { get; }
  17. public RenderScaleTestCase(float renderScale, bool cameraTargetIsRenderTexture)
  18. {
  19. this.renderScale = renderScale;
  20. this.cameraTargetIsRenderTexture = cameraTargetIsRenderTexture;
  21. }
  22. public override string ToString()
  23. {
  24. return $"Render Scale : {renderScale}, Rendering To Texture : {cameraTargetIsRenderTexture}";
  25. }
  26. }
  27. [OneTimeSetUp]
  28. public void GlobalSetup()
  29. {
  30. var go = new GameObject(nameof(RenderTextureDescriptorDimensionsTests));
  31. m_Camera = go.AddComponent<Camera>();
  32. m_CameraData = new UniversalCameraData
  33. {
  34. camera = m_Camera
  35. };
  36. m_RT = new RenderTexture(256, 256, 16, RenderTextureFormat.ARGB32);
  37. m_RT.Create();
  38. }
  39. [OneTimeTearDown]
  40. public void GlobalCleanup()
  41. {
  42. Object.DestroyImmediate(m_Camera.gameObject);
  43. m_RT.Release();
  44. }
  45. public RenderTextureDescriptor CreateRenderTextureDescriptor()
  46. {
  47. bool isHdrEnabled = false;
  48. HDRColorBufferPrecision requestHDRColorBufferPrecision = HDRColorBufferPrecision._64Bits;
  49. int msaaSamples = 1;
  50. bool needsAlpha = false;
  51. bool requiresOpaqueTexture = false;
  52. return UniversalRenderPipeline.CreateRenderTextureDescriptor(
  53. m_Camera,
  54. m_CameraData,
  55. isHdrEnabled,
  56. requestHDRColorBufferPrecision,
  57. msaaSamples,
  58. needsAlpha,
  59. requiresOpaqueTexture);
  60. }
  61. public void CheckDimensions(RenderTextureDescriptor desc, RenderScaleTestCase testCase)
  62. {
  63. var expectedWidth = Mathf.Max(1, (int)(m_Camera.pixelWidth * testCase.renderScale));
  64. var expectedHeight = Mathf.Max(1, (int)(m_Camera.pixelHeight * testCase.renderScale));
  65. Assert.AreEqual(expectedWidth, desc.width);
  66. Assert.AreEqual(expectedHeight, desc.height);
  67. }
  68. public static IEnumerable<RenderScaleTestCase> TestCasesTextureDimension()
  69. {
  70. // Texture target
  71. yield return new RenderScaleTestCase(0f, true);
  72. yield return new RenderScaleTestCase(0.5f, true);
  73. yield return new RenderScaleTestCase(1f, true);
  74. yield return new RenderScaleTestCase(2f, true);
  75. // Backbuffer target
  76. yield return new RenderScaleTestCase(0f, false);
  77. yield return new RenderScaleTestCase(0.5f, false);
  78. yield return new RenderScaleTestCase(1f, false);
  79. yield return new RenderScaleTestCase(2f, false);
  80. }
  81. [TestCaseSource(nameof(TestCasesTextureDimension))]
  82. public void TextureDescriptor_FromCameraData(RenderScaleTestCase testCase)
  83. {
  84. // Setup needed data for the test
  85. m_CameraData.renderScale = testCase.renderScale;
  86. m_Camera.targetTexture = (testCase.cameraTargetIsRenderTexture) ? m_RT : null;
  87. var desc = CreateRenderTextureDescriptor();
  88. CheckDimensions(desc, testCase);
  89. }
  90. public class TestRTDimensionNativeRenderPass : ScriptableRenderPass {}
  91. [TestCaseSource(nameof(TestCasesTextureDimension))]
  92. public void TextureDescriptor_FromNativeRenderPass(RenderScaleTestCase testCase)
  93. {
  94. // Setup needed data for the test
  95. m_CameraData.renderScale = testCase.renderScale;
  96. m_Camera.targetTexture = (testCase.cameraTargetIsRenderTexture) ? m_RT : null;
  97. m_CameraData.cameraTargetDescriptor = CreateRenderTextureDescriptor();
  98. var nativeRenderPass = new TestRTDimensionNativeRenderPass();
  99. ScriptableRenderer.GetRenderTextureDescriptor(m_CameraData, nativeRenderPass, out var desc);
  100. CheckDimensions(desc, testCase);
  101. }
  102. }
  103. }