using UnityEngine; using UnityEngine.XR; namespace DynamicFogAndMist { [ExecuteInEditMode] [ImageEffectAllowedInSceneView] [HelpURLAttribute("http://kronnect.com/taptapgo")] [RequireComponent(typeof(Camera))] public class DynamicFogExclusive : DynamicFogBase { private RenderTexture rt; [Range(0.1f, 2f)] public float renderScale = 1f; private void OnPreRender() { if (!(fogMat == null) && _alpha != 0f && !(currentCamera == null)) { if (XRSettings.enabled) { RenderTextureDescriptor eyeTextureDesc = XRSettings.eyeTextureDesc; eyeTextureDesc.width = (int)((float)eyeTextureDesc.width * renderScale); eyeTextureDesc.height = (int)((float)eyeTextureDesc.height * renderScale); rt = RenderTexture.GetTemporary(eyeTextureDesc); } else { int width = (int)((float)currentCamera.pixelWidth * renderScale); int num = (int)((float)currentCamera.pixelHeight * renderScale); rt = RenderTexture.GetTemporary(width, num, 24, RenderTextureFormat.ARGB32); rt.antiAliasing = 1; } rt.wrapMode = TextureWrapMode.Clamp; currentCamera.targetTexture = rt; } } private void OnPostRender() { if (fogMat == null || _alpha == 0f || currentCamera == null) { return; } if (shouldUpdateMaterialProperties) { shouldUpdateMaterialProperties = false; UpdateMaterialPropertiesNow(); } if (currentCamera.orthographic) { if (!matOrtho) { ResetMaterial(); } fogMat.SetVector("_ClipDir", currentCamera.transform.forward); } else if (matOrtho) { ResetMaterial(); } if (_useSinglePassStereoRenderingMatrix && XRSettings.enabled) { fogMat.SetMatrix("_ClipToWorld", currentCamera.cameraToWorldMatrix); } else { fogMat.SetMatrix("_ClipToWorld", currentCamera.cameraToWorldMatrix * currentCamera.projectionMatrix.inverse); } currentCamera.targetTexture = null; Graphics.Blit(rt, null, fogMat); RenderTexture.ReleaseTemporary(rt); } } }