// Copyright (c) 2023 Nico de Poel // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in all // copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.Reflection; using System.Text; using FidelityFX.FSR2; using UnityEngine; using UnityEngine.Rendering.PostProcessing; using FidelityFX.FSR3; public class DebugDumper : MonoBehaviour { private PostProcessLayer _layer; private float _scaleFactor = 1.0f; private float _lastScaleTime = 0f; void Start() { var sb = new StringBuilder("SystemInfo:\n"); foreach (var property in typeof(SystemInfo).GetProperties(BindingFlags.Static | BindingFlags.Public)) { sb.AppendLine($"- {property.Name} = {property.GetValue(null)}"); } Debug.Log(sb); _layer = GetComponent(); } void OnEnable() { ScalableBufferManager.ResizeBuffers(_scaleFactor, _scaleFactor); } void OnDisable() { ScalableBufferManager.ResizeBuffers(1f, 1f); } void Update() { if (Input.GetKeyDown(KeyCode.F12)) { string path = Path.Combine(Directory.GetCurrentDirectory(), $"screenshot-{DateTime.Now:yyyyMMdd-HHmmss}.png"); ScreenCapture.CaptureScreenshot(path); Debug.Log($"Screenshot saved to: {path}"); } if (_layer == null) return; if (Input.GetButtonDown("Fire1")) { if (_layer.antialiasingMode == PostProcessLayer.Antialiasing.None) { _layer.antialiasingMode = PostProcessLayer.Antialiasing.AdvancedUpscaling; _layer.upscaling.upscalerType = default; } else { int newUpscalerType = (int)_layer.upscaling.upscalerType + 1; if (newUpscalerType >= Enum.GetValues(typeof(Upscaling.UpscalerType)).Length) { _layer.antialiasingMode = PostProcessLayer.Antialiasing.None; _layer.upscaling.upscalerType = default; } else { _layer.antialiasingMode = PostProcessLayer.Antialiasing.AdvancedUpscaling; _layer.upscaling.upscalerType = (Upscaling.UpscalerType)newUpscalerType; } } } if (Input.GetButtonDown("Fire2")) { int quality = (int)_layer.upscaling.qualityMode; quality = (quality + 1) % Enum.GetValues(typeof(Fsr2.QualityMode)).Length; _layer.upscaling.qualityMode = (Fsr2.QualityMode)quality; } if (Input.GetButtonDown("Fire3")) { _layer.upscaling.exposureSource = _layer.upscaling.exposureSource != Upscaling.ExposureSource.Auto ? Upscaling.ExposureSource.Auto : Upscaling.ExposureSource.Default; } if (Input.GetButtonDown("Jump")) { _layer.upscaling.ResetHistory(); } float vertical = Input.GetAxis("Vertical"); if (vertical is < -0.3f or > 0.3f && Time.realtimeSinceStartup > _lastScaleTime + 0.3f) { _scaleFactor += 0.05f * Math.Sign(vertical); _scaleFactor = Mathf.Clamp(_scaleFactor, 0.1f, 1.0f); ScalableBufferManager.ResizeBuffers(_scaleFactor, _scaleFactor); _lastScaleTime = Time.realtimeSinceStartup; } } private void OnGUI() { if (_layer == null) return; float scale = Screen.height / 720f; if (scale > Mathf.Epsilon) { GUI.matrix = Matrix4x4.Scale(new Vector3(scale, scale, scale)); } var renderSize = _layer.upscaling.MaxRenderSize; var displaySize = _layer.upscaling.UpscaleSize; GUILayout.BeginArea(new Rect(0, 0, Screen.width, Screen.height)); GUILayout.Label($"Upscaler: {(_layer.antialiasingMode == PostProcessLayer.Antialiasing.AdvancedUpscaling ? _layer.upscaling.upscalerType.ToString() : "None")}"); GUILayout.Label($"Quality: {_layer.upscaling.qualityMode}"); GUILayout.Label($"Exposure: {(_layer.upscaling.exposureSource)}"); GUILayout.Label($"Scale: {Mathf.RoundToInt(_scaleFactor * 100)}%"); GUILayout.Label($"Render: {Mathf.CeilToInt(renderSize.x * _scaleFactor)}x{Mathf.CeilToInt(renderSize.y * _scaleFactor)}"); GUILayout.Label($"Display: {displaySize.x}x{displaySize.y}"); if (Input.GetButton("Jump")) { GUILayout.Label("Reset"); } GUILayout.EndArea(); } }