using System.Collections; using System.Collections.Generic; using UnityEngine; /** * * Blits a RenderTexture on the Camera in this GameObject. * The RenderingCamera field controls which Camera's render target is blitted. * The render target of RenderingCamera is scaled according to Options.RenderScale. * */ [RequireComponent(typeof(Camera))] public class RenderScaler : MonoBehaviour { public Options Options; public Camera RenderingCamera; public float CurrentRenderScale = -1f; // 100ms between texture recreation should lessen the gpu load a bit // when moving the slider around, but still give realtime (enough) feedback. public float RenderScaleChangeCooldown = 0.1f; private RenderTexture CameraTarget; private float LastChange = 0; private void Start() { UpdateRenderTexture(); } private void Update() { if (Time.unscaledTime - LastChange > RenderScaleChangeCooldown && CurrentRenderScale != Options.RenderScale) { LastChange = Time.unscaledTime; UpdateRenderTexture(); } } private void UpdateRenderTexture() { CurrentRenderScale = Options.RenderScale; RenderingCamera.targetTexture.Release(); RenderingCamera.targetTexture.width = (int)(Screen.width * CurrentRenderScale); RenderingCamera.targetTexture.height = (int)(Screen.height * CurrentRenderScale); RenderingCamera.targetTexture.Create(); } private void OnRenderImage(RenderTexture src, RenderTexture dst) { Graphics.Blit(RenderingCamera.targetTexture, dst); } }