From 18e978101355423b061249438a181da7c081636c Mon Sep 17 00:00:00 2001 From: Nico de Poel Date: Tue, 30 May 2023 11:05:24 +0200 Subject: [PATCH] Added methods for manipulating camera viewport rect --- .../Runtime/Effects/SuperResolution.cs | 31 +++++++++++++++---- 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/Packages/com.unity.postprocessing@3.2.2/PostProcessing/Runtime/Effects/SuperResolution.cs b/Packages/com.unity.postprocessing@3.2.2/PostProcessing/Runtime/Effects/SuperResolution.cs index e5f9ea5..13599f7 100644 --- a/Packages/com.unity.postprocessing@3.2.2/PostProcessing/Runtime/Effects/SuperResolution.cs +++ b/Packages/com.unity.postprocessing@3.2.2/PostProcessing/Runtime/Effects/SuperResolution.cs @@ -71,6 +71,8 @@ namespace UnityEngine.Rendering.PostProcessing } public Vector2 jitter { get; private set; } + public Vector2Int renderSize => _renderSize; + public Vector2Int displaySize => _displaySize; private Fsr2Context _fsrContext; private Vector2Int _renderSize; @@ -83,6 +85,8 @@ namespace UnityEngine.Rendering.PostProcessing private Fsr2.QualityMode _prevQualityMode; private Vector2Int _prevDisplaySize; + private Rect _originalRect; + public bool IsSupported() { return SystemInfo.supportsComputeShaders && SystemInfo.supportsMotionVectors; @@ -92,6 +96,11 @@ namespace UnityEngine.Rendering.PostProcessing { return DepthTextureMode.Depth | DepthTextureMode.MotionVectors; } + + public void Release() + { + DestroyFsrContext(); + } public void ResetHistory() { @@ -103,6 +112,21 @@ namespace UnityEngine.Rendering.PostProcessing ApplyJitter(context.camera); } + public void ConfigureCameraViewport(PostProcessRenderContext context) + { + var cam = context.camera; + _displaySize = new Vector2Int(cam.pixelWidth, cam.pixelHeight); // TODO: also support render texture targets properly + _originalRect = cam.rect; + + cam.aspect = (_displaySize.x * _originalRect.width) / (_displaySize.y * _originalRect.height); + cam.rect = new Rect(0, 0, _originalRect.width * _renderSize.x / cam.pixelWidth, _originalRect.height * _renderSize.y / cam.pixelHeight); + } + + public void ResetCameraViewport(PostProcessRenderContext context) + { + context.camera.rect = _originalRect; + } + public void Render(PostProcessRenderContext context) { var cmd = context.command; @@ -143,7 +167,7 @@ namespace UnityEngine.Rendering.PostProcessing private void CreateFsrContext(PostProcessRenderContext context) { - _displaySize = new Vector2Int(context.width, context.height); + _displaySize = new Vector2Int(context.width, context.height); // TODO: get rid of this _prevDisplaySize = _displaySize; @@ -234,11 +258,6 @@ namespace UnityEngine.Rendering.PostProcessing } } - public void Release() - { - DestroyFsrContext(); - } - private class Callbacks : Fsr2CallbacksBase { private readonly PostProcessResources _resources;