From a10eea6e4ce647061813519d5b0ea496f29495b9 Mon Sep 17 00:00:00 2001
From: leonard Wu <364452445@qq.com>
Date: 星期四, 09 八月 2018 09:47:08 +0800
Subject: [PATCH] 同步最新svn内容

---
 Assets/Plugins/PostProcessing/Runtime/Components/EyeAdaptationComponent.cs |  366 ++++++++++++++++++++++++++--------------------------
 1 files changed, 183 insertions(+), 183 deletions(-)

diff --git a/Assets/Plugins/PostProcessing/Runtime/Components/EyeAdaptationComponent.cs b/Assets/Plugins/PostProcessing/Runtime/Components/EyeAdaptationComponent.cs
index 93fca12..c2b9fe4 100644
--- a/Assets/Plugins/PostProcessing/Runtime/Components/EyeAdaptationComponent.cs
+++ b/Assets/Plugins/PostProcessing/Runtime/Components/EyeAdaptationComponent.cs
@@ -1,183 +1,183 @@
-namespace UnityEngine.PostProcessing
-{
-    public sealed class EyeAdaptationComponent : PostProcessingComponentRenderTexture<EyeAdaptationModel>
-    {
-        static class Uniforms
-        {
-            internal static readonly int _Params = Shader.PropertyToID("_Params");
-            internal static readonly int _Speed = Shader.PropertyToID("_Speed");
-            internal static readonly int _ScaleOffsetRes = Shader.PropertyToID("_ScaleOffsetRes");
-            internal static readonly int _ExposureCompensation = Shader.PropertyToID("_ExposureCompensation");
-            internal static readonly int _AutoExposure = Shader.PropertyToID("_AutoExposure");
-            internal static readonly int _DebugWidth = Shader.PropertyToID("_DebugWidth");
-        }
-
-        ComputeShader m_EyeCompute;
-        ComputeBuffer m_HistogramBuffer;
-
-        readonly RenderTexture[] m_AutoExposurePool = new RenderTexture[2];
-        int m_AutoExposurePingPing;
-        RenderTexture m_CurrentAutoExposure;
-
-        RenderTexture m_DebugHistogram;
-
-        static uint[] s_EmptyHistogramBuffer;
-
-        bool m_FirstFrame = true;
-
-        // Don't forget to update 'EyeAdaptation.cginc' if you change these values !
-        const int k_HistogramBins = 64;
-        const int k_HistogramThreadX = 16;
-        const int k_HistogramThreadY = 16;
-
-        public override bool active {
-            get {
-                return model != null && model.enabled
-                       && SystemInfo.supportsComputeShaders
-                       && !context.interrupted;
-            }
-        }
-
-        public void ResetHistory()
-        {
-            m_FirstFrame = true;
-        }
-
-        public override void OnEnable()
-        {
-            m_FirstFrame = true;
-        }
-
-        public override void OnDisable()
-        {
-            foreach (var rt in m_AutoExposurePool)
-                GraphicsUtils.Destroy(rt);
-
-            if (m_HistogramBuffer != null)
-                m_HistogramBuffer.Release();
-
-            m_HistogramBuffer = null;
-
-            if (m_DebugHistogram != null)
-                m_DebugHistogram.Release();
-
-            m_DebugHistogram = null;
-        }
-
-        Vector4 GetHistogramScaleOffsetRes()
-        {
-            var settings = model.settings;
-            float diff = settings.logMax - settings.logMin;
-            float scale = 1f / diff;
-            float offset = -settings.logMin * scale;
-            return new Vector4(scale, offset, Mathf.Floor(context.width / 2f), Mathf.Floor(context.height / 2f));
-        }
-
-        public Texture Prepare(RenderTexture source, Material uberMaterial)
-        {
-            var settings = model.settings;
-
-            // Setup compute
-            if (m_EyeCompute == null)
-                m_EyeCompute = Resources.Load<ComputeShader>("Shaders/EyeHistogram");
-
-            var material = context.materialFactory.Get("Hidden/Post FX/Eye Adaptation");
-            material.shaderKeywords = null;
-
-            if (m_HistogramBuffer == null)
-                m_HistogramBuffer = new ComputeBuffer(k_HistogramBins, sizeof(uint));
-
-            if (s_EmptyHistogramBuffer == null)
-                s_EmptyHistogramBuffer = new uint[k_HistogramBins];
-
-            // Downscale the framebuffer, we don't need an absolute precision for auto exposure and it
-            // helps making it more stable
-            var scaleOffsetRes = GetHistogramScaleOffsetRes();
-
-            var rt = context.renderTextureFactory.Get((int)scaleOffsetRes.z, (int)scaleOffsetRes.w, 0, source.format);
-            Graphics.Blit(source, rt);
-
-            if (m_AutoExposurePool[0] == null || !m_AutoExposurePool[0].IsCreated())
-                m_AutoExposurePool[0] = new RenderTexture(1, 1, 0, RenderTextureFormat.RFloat);
-
-            if (m_AutoExposurePool[1] == null || !m_AutoExposurePool[1].IsCreated())
-                m_AutoExposurePool[1] = new RenderTexture(1, 1, 0, RenderTextureFormat.RFloat);
-
-            // Clears the buffer on every frame as we use it to accumulate luminance values on each frame
-            m_HistogramBuffer.SetData(s_EmptyHistogramBuffer);
-
-            // Gets a log histogram
-            int kernel = m_EyeCompute.FindKernel("KEyeHistogram");
-            m_EyeCompute.SetBuffer(kernel, "_Histogram", m_HistogramBuffer);
-            m_EyeCompute.SetTexture(kernel, "_Source", rt);
-            m_EyeCompute.SetVector("_ScaleOffsetRes", scaleOffsetRes);
-            m_EyeCompute.Dispatch(kernel, Mathf.CeilToInt(rt.width / (float)k_HistogramThreadX), Mathf.CeilToInt(rt.height / (float)k_HistogramThreadY), 1);
-
-            // Cleanup
-            context.renderTextureFactory.Release(rt);
-
-            // Make sure filtering values are correct to avoid apocalyptic consequences
-            const float minDelta = 1e-2f;
-            settings.highPercent = Mathf.Clamp(settings.highPercent, 1f + minDelta, 99f);
-            settings.lowPercent = Mathf.Clamp(settings.lowPercent, 1f, settings.highPercent - minDelta);
-
-            // Compute auto exposure
-            material.SetBuffer("_Histogram", m_HistogramBuffer); // No (int, buffer) overload for SetBuffer ?
-            material.SetVector(Uniforms._Params, new Vector4(settings.lowPercent * 0.01f, settings.highPercent * 0.01f, Mathf.Exp(settings.minLuminance * 0.69314718055994530941723212145818f), Mathf.Exp(settings.maxLuminance * 0.69314718055994530941723212145818f)));
-            material.SetVector(Uniforms._Speed, new Vector2(settings.speedDown, settings.speedUp));
-            material.SetVector(Uniforms._ScaleOffsetRes, scaleOffsetRes);
-            material.SetFloat(Uniforms._ExposureCompensation, settings.keyValue);
-
-            if (settings.dynamicKeyValue)
-                material.EnableKeyword("AUTO_KEY_VALUE");
-
-            if (m_FirstFrame || !Application.isPlaying)
-            {
-                // We don't want eye adaptation when not in play mode because the GameView isn't
-                // animated, thus making it harder to tweak. Just use the final audo exposure value.
-                m_CurrentAutoExposure = m_AutoExposurePool[0];
-                Graphics.Blit(null, m_CurrentAutoExposure, material, (int)EyeAdaptationModel.EyeAdaptationType.Fixed);
-
-                // Copy current exposure to the other pingpong target to avoid adapting from black
-                Graphics.Blit(m_AutoExposurePool[0], m_AutoExposurePool[1]);
-            }
-            else
-            {
-                int pp = m_AutoExposurePingPing;
-                var src = m_AutoExposurePool[++pp % 2];
-                var dst = m_AutoExposurePool[++pp % 2];
-                Graphics.Blit(src, dst, material, (int)settings.adaptationType);
-                m_AutoExposurePingPing = ++pp % 2;
-                m_CurrentAutoExposure = dst;
-            }
-
-            // Generate debug histogram
-            if (context.profile.debugViews.IsModeActive(BuiltinDebugViewsModel.Mode.EyeAdaptation))
-            {
-                if (m_DebugHistogram == null || !m_DebugHistogram.IsCreated())
-                {
-                    m_DebugHistogram = new RenderTexture(256, 128, 0, RenderTextureFormat.ARGB32)
-                    {
-                        filterMode = FilterMode.Point,
-                        wrapMode = TextureWrapMode.Clamp
-                    };
-                }
-
-                material.SetFloat(Uniforms._DebugWidth, m_DebugHistogram.width);
-                Graphics.Blit(null, m_DebugHistogram, material, 2);
-            }
-
-            m_FirstFrame = false;
-            return m_CurrentAutoExposure;
-        }
-
-        public void OnGUI()
-        {
-            if (m_DebugHistogram == null || !m_DebugHistogram.IsCreated())
-                return;
-
-            var rect = new Rect(context.viewport.x * Screen.width + 8f, 8f, m_DebugHistogram.width, m_DebugHistogram.height);
-            GUI.DrawTexture(rect, m_DebugHistogram);
-        }
-    }
-}
+namespace UnityEngine.PostProcessing
+{
+    public sealed class EyeAdaptationComponent : PostProcessingComponentRenderTexture<EyeAdaptationModel>
+    {
+        static class Uniforms
+        {
+            internal static readonly int _Params = Shader.PropertyToID("_Params");
+            internal static readonly int _Speed = Shader.PropertyToID("_Speed");
+            internal static readonly int _ScaleOffsetRes = Shader.PropertyToID("_ScaleOffsetRes");
+            internal static readonly int _ExposureCompensation = Shader.PropertyToID("_ExposureCompensation");
+            internal static readonly int _AutoExposure = Shader.PropertyToID("_AutoExposure");
+            internal static readonly int _DebugWidth = Shader.PropertyToID("_DebugWidth");
+        }
+
+        ComputeShader m_EyeCompute;
+        ComputeBuffer m_HistogramBuffer;
+
+        readonly RenderTexture[] m_AutoExposurePool = new RenderTexture[2];
+        int m_AutoExposurePingPing;
+        RenderTexture m_CurrentAutoExposure;
+
+        RenderTexture m_DebugHistogram;
+
+        static uint[] s_EmptyHistogramBuffer;
+
+        bool m_FirstFrame = true;
+
+        // Don't forget to update 'EyeAdaptation.cginc' if you change these values !
+        const int k_HistogramBins = 64;
+        const int k_HistogramThreadX = 16;
+        const int k_HistogramThreadY = 16;
+
+        public override bool active {
+            get {
+                return model != null && model.enabled
+                       && SystemInfo.supportsComputeShaders
+                       && !context.interrupted;
+            }
+        }
+
+        public void ResetHistory()
+        {
+            m_FirstFrame = true;
+        }
+
+        public override void OnEnable()
+        {
+            m_FirstFrame = true;
+        }
+
+        public override void OnDisable()
+        {
+            foreach (var rt in m_AutoExposurePool)
+                GraphicsUtils.Destroy(rt);
+
+            if (m_HistogramBuffer != null)
+                m_HistogramBuffer.Release();
+
+            m_HistogramBuffer = null;
+
+            if (m_DebugHistogram != null)
+                m_DebugHistogram.Release();
+
+            m_DebugHistogram = null;
+        }
+
+        Vector4 GetHistogramScaleOffsetRes()
+        {
+            var settings = model.settings;
+            float diff = settings.logMax - settings.logMin;
+            float scale = 1f / diff;
+            float offset = -settings.logMin * scale;
+            return new Vector4(scale, offset, Mathf.Floor(context.width / 2f), Mathf.Floor(context.height / 2f));
+        }
+
+        public Texture Prepare(RenderTexture source, Material uberMaterial)
+        {
+            var settings = model.settings;
+
+            // Setup compute
+            if (m_EyeCompute == null)
+                m_EyeCompute = Resources.Load<ComputeShader>("Shaders/EyeHistogram");
+
+            var material = context.materialFactory.Get("Hidden/Post FX/Eye Adaptation");
+            material.shaderKeywords = null;
+
+            if (m_HistogramBuffer == null)
+                m_HistogramBuffer = new ComputeBuffer(k_HistogramBins, sizeof(uint));
+
+            if (s_EmptyHistogramBuffer == null)
+                s_EmptyHistogramBuffer = new uint[k_HistogramBins];
+
+            // Downscale the framebuffer, we don't need an absolute precision for auto exposure and it
+            // helps making it more stable
+            var scaleOffsetRes = GetHistogramScaleOffsetRes();
+
+            var rt = context.renderTextureFactory.Get((int)scaleOffsetRes.z, (int)scaleOffsetRes.w, 0, source.format);
+            Graphics.Blit(source, rt);
+
+            if (m_AutoExposurePool[0] == null || !m_AutoExposurePool[0].IsCreated())
+                m_AutoExposurePool[0] = new RenderTexture(1, 1, 0, RenderTextureFormat.RFloat);
+
+            if (m_AutoExposurePool[1] == null || !m_AutoExposurePool[1].IsCreated())
+                m_AutoExposurePool[1] = new RenderTexture(1, 1, 0, RenderTextureFormat.RFloat);
+
+            // Clears the buffer on every frame as we use it to accumulate luminance values on each frame
+            m_HistogramBuffer.SetData(s_EmptyHistogramBuffer);
+
+            // Gets a log histogram
+            int kernel = m_EyeCompute.FindKernel("KEyeHistogram");
+            m_EyeCompute.SetBuffer(kernel, "_Histogram", m_HistogramBuffer);
+            m_EyeCompute.SetTexture(kernel, "_Source", rt);
+            m_EyeCompute.SetVector("_ScaleOffsetRes", scaleOffsetRes);
+            m_EyeCompute.Dispatch(kernel, Mathf.CeilToInt(rt.width / (float)k_HistogramThreadX), Mathf.CeilToInt(rt.height / (float)k_HistogramThreadY), 1);
+
+            // Cleanup
+            context.renderTextureFactory.Release(rt);
+
+            // Make sure filtering values are correct to avoid apocalyptic consequences
+            const float minDelta = 1e-2f;
+            settings.highPercent = Mathf.Clamp(settings.highPercent, 1f + minDelta, 99f);
+            settings.lowPercent = Mathf.Clamp(settings.lowPercent, 1f, settings.highPercent - minDelta);
+
+            // Compute auto exposure
+            material.SetBuffer("_Histogram", m_HistogramBuffer); // No (int, buffer) overload for SetBuffer ?
+            material.SetVector(Uniforms._Params, new Vector4(settings.lowPercent * 0.01f, settings.highPercent * 0.01f, Mathf.Exp(settings.minLuminance * 0.69314718055994530941723212145818f), Mathf.Exp(settings.maxLuminance * 0.69314718055994530941723212145818f)));
+            material.SetVector(Uniforms._Speed, new Vector2(settings.speedDown, settings.speedUp));
+            material.SetVector(Uniforms._ScaleOffsetRes, scaleOffsetRes);
+            material.SetFloat(Uniforms._ExposureCompensation, settings.keyValue);
+
+            if (settings.dynamicKeyValue)
+                material.EnableKeyword("AUTO_KEY_VALUE");
+
+            if (m_FirstFrame || !Application.isPlaying)
+            {
+                // We don't want eye adaptation when not in play mode because the GameView isn't
+                // animated, thus making it harder to tweak. Just use the final audo exposure value.
+                m_CurrentAutoExposure = m_AutoExposurePool[0];
+                Graphics.Blit(null, m_CurrentAutoExposure, material, (int)EyeAdaptationModel.EyeAdaptationType.Fixed);
+
+                // Copy current exposure to the other pingpong target to avoid adapting from black
+                Graphics.Blit(m_AutoExposurePool[0], m_AutoExposurePool[1]);
+            }
+            else
+            {
+                int pp = m_AutoExposurePingPing;
+                var src = m_AutoExposurePool[++pp % 2];
+                var dst = m_AutoExposurePool[++pp % 2];
+                Graphics.Blit(src, dst, material, (int)settings.adaptationType);
+                m_AutoExposurePingPing = ++pp % 2;
+                m_CurrentAutoExposure = dst;
+            }
+
+            // Generate debug histogram
+            if (context.profile.debugViews.IsModeActive(BuiltinDebugViewsModel.Mode.EyeAdaptation))
+            {
+                if (m_DebugHistogram == null || !m_DebugHistogram.IsCreated())
+                {
+                    m_DebugHistogram = new RenderTexture(256, 128, 0, RenderTextureFormat.ARGB32)
+                    {
+                        filterMode = FilterMode.Point,
+                        wrapMode = TextureWrapMode.Clamp
+                    };
+                }
+
+                material.SetFloat(Uniforms._DebugWidth, m_DebugHistogram.width);
+                Graphics.Blit(null, m_DebugHistogram, material, 2);
+            }
+
+            m_FirstFrame = false;
+            return m_CurrentAutoExposure;
+        }
+
+        public void OnGUI()
+        {
+            if (m_DebugHistogram == null || !m_DebugHistogram.IsCreated())
+                return;
+
+            var rect = new Rect(context.viewport.x * Screen.width + 8f, 8f, m_DebugHistogram.width, m_DebugHistogram.height);
+            GUI.DrawTexture(rect, m_DebugHistogram);
+        }
+    }
+}

--
Gitblit v1.8.0