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/Editor/Monitors/VectorscopeMonitor.cs | 482 ++++++++++++++++++++++++++--------------------------
1 files changed, 241 insertions(+), 241 deletions(-)
diff --git a/Assets/Plugins/PostProcessing/Editor/Monitors/VectorscopeMonitor.cs b/Assets/Plugins/PostProcessing/Editor/Monitors/VectorscopeMonitor.cs
index 8514549..ee15b3c 100644
--- a/Assets/Plugins/PostProcessing/Editor/Monitors/VectorscopeMonitor.cs
+++ b/Assets/Plugins/PostProcessing/Editor/Monitors/VectorscopeMonitor.cs
@@ -1,241 +1,241 @@
-using UnityEditorInternal;
-using UnityEngine;
-using UnityEngine.PostProcessing;
-
-namespace UnityEditor.PostProcessing
-{
- public class VectorscopeMonitor : PostProcessingMonitor
- {
- static GUIContent s_MonitorTitle = new GUIContent("Vectorscope");
-
- ComputeShader m_ComputeShader;
- ComputeBuffer m_Buffer;
- Material m_Material;
- RenderTexture m_VectorscopeTexture;
- Rect m_MonitorAreaRect;
-
- public VectorscopeMonitor()
- {
- m_ComputeShader = EditorResources.Load<ComputeShader>("Monitors/VectorscopeCompute.compute");
- }
-
- public override void Dispose()
- {
- GraphicsUtils.Destroy(m_Material);
- GraphicsUtils.Destroy(m_VectorscopeTexture);
-
- if (m_Buffer != null)
- m_Buffer.Release();
-
- m_Material = null;
- m_VectorscopeTexture = null;
- m_Buffer = null;
- }
-
- public override bool IsSupported()
- {
- return m_ComputeShader != null && GraphicsUtils.supportsDX11;
- }
-
- public override GUIContent GetMonitorTitle()
- {
- return s_MonitorTitle;
- }
-
- public override void OnMonitorSettings()
- {
- EditorGUI.BeginChangeCheck();
-
- bool refreshOnPlay = m_MonitorSettings.refreshOnPlay;
- float exposure = m_MonitorSettings.vectorscopeExposure;
- bool showBackground = m_MonitorSettings.vectorscopeShowBackground;
-
- refreshOnPlay = GUILayout.Toggle(refreshOnPlay, new GUIContent(FxStyles.playIcon, "Keep refreshing the vectorscope in play mode; this may impact performances."), FxStyles.preButton);
- exposure = GUILayout.HorizontalSlider(exposure, 0.05f, 0.3f, FxStyles.preSlider, FxStyles.preSliderThumb, GUILayout.Width(40f));
- showBackground = GUILayout.Toggle(showBackground, new GUIContent(FxStyles.checkerIcon, "Show an YUV background in the vectorscope."), FxStyles.preButton);
-
- if (EditorGUI.EndChangeCheck())
- {
- Undo.RecordObject(m_BaseEditor.serializedObject.targetObject, "Vectorscope Settings Changed");
- m_MonitorSettings.refreshOnPlay = refreshOnPlay;
- m_MonitorSettings.vectorscopeExposure = exposure;
- m_MonitorSettings.vectorscopeShowBackground = showBackground;
- InternalEditorUtility.RepaintAllViews();
- }
- }
-
- public override void OnMonitorGUI(Rect r)
- {
- if (Event.current.type == EventType.Repaint)
- {
- // If m_MonitorAreaRect isn't set the preview was just opened so refresh the render to get the vectoscope data
- if (Mathf.Approximately(m_MonitorAreaRect.width, 0) && Mathf.Approximately(m_MonitorAreaRect.height, 0))
- InternalEditorUtility.RepaintAllViews();
-
- // Sizing
- float size = 0f;
-
- if (r.width < r.height)
- {
- size = m_VectorscopeTexture != null
- ? Mathf.Min(m_VectorscopeTexture.width, r.width - 35f)
- : r.width;
- }
- else
- {
- size = m_VectorscopeTexture != null
- ? Mathf.Min(m_VectorscopeTexture.height, r.height - 25f)
- : r.height;
- }
-
- m_MonitorAreaRect = new Rect(
- Mathf.Floor(r.x + r.width / 2f - size / 2f),
- Mathf.Floor(r.y + r.height / 2f - size / 2f - 5f),
- size, size
- );
-
- if (m_VectorscopeTexture != null)
- {
- m_Material.SetFloat("_Exposure", m_MonitorSettings.vectorscopeExposure);
-
- var oldActive = RenderTexture.active;
- Graphics.Blit(null, m_VectorscopeTexture, m_Material, m_MonitorSettings.vectorscopeShowBackground ? 0 : 1);
- RenderTexture.active = oldActive;
-
- Graphics.DrawTexture(m_MonitorAreaRect, m_VectorscopeTexture);
-
- var color = Color.white;
- const float kTickSize = 10f;
- const int kTickCount = 24;
-
- float radius = m_MonitorAreaRect.width / 2f;
- float midX = m_MonitorAreaRect.x + radius;
- float midY = m_MonitorAreaRect.y + radius;
- var center = new Vector2(midX, midY);
-
- // Cross
- color.a *= 0.5f;
- Handles.color = color;
- Handles.DrawLine(new Vector2(midX, m_MonitorAreaRect.y), new Vector2(midX, m_MonitorAreaRect.y + m_MonitorAreaRect.height));
- Handles.DrawLine(new Vector2(m_MonitorAreaRect.x, midY), new Vector2(m_MonitorAreaRect.x + m_MonitorAreaRect.width, midY));
-
- if (m_MonitorAreaRect.width > 100f)
- {
- color.a = 1f;
-
- // Ticks
- Handles.color = color;
- for (int i = 0; i < kTickCount; i++)
- {
- float a = (float)i / (float)kTickCount;
- float theta = a * (Mathf.PI * 2f);
- float tx = Mathf.Cos(theta + (Mathf.PI / 2f));
- float ty = Mathf.Sin(theta - (Mathf.PI / 2f));
- var innerVec = center + new Vector2(tx, ty) * (radius - kTickSize);
- var outerVec = center + new Vector2(tx, ty) * radius;
- Handles.DrawAAPolyLine(3f, innerVec, outerVec);
- }
-
- // Labels (where saturation reaches 75%)
- color.a = 1f;
- var oldColor = GUI.color;
- GUI.color = color * 2f;
-
- var point = new Vector2(-0.254f, -0.750f) * radius + center;
- var rect = new Rect(point.x - 10f, point.y - 10f, 20f, 20f);
- GUI.Label(rect, "[R]", FxStyles.tickStyleCenter);
-
- point = new Vector2(-0.497f, 0.629f) * radius + center;
- rect = new Rect(point.x - 10f, point.y - 10f, 20f, 20f);
- GUI.Label(rect, "[G]", FxStyles.tickStyleCenter);
-
- point = new Vector2(0.750f, 0.122f) * radius + center;
- rect = new Rect(point.x - 10f, point.y - 10f, 20f, 20f);
- GUI.Label(rect, "[B]", FxStyles.tickStyleCenter);
-
- point = new Vector2(-0.750f, -0.122f) * radius + center;
- rect = new Rect(point.x - 10f, point.y - 10f, 20f, 20f);
- GUI.Label(rect, "[Y]", FxStyles.tickStyleCenter);
-
- point = new Vector2(0.254f, 0.750f) * radius + center;
- rect = new Rect(point.x - 10f, point.y - 10f, 20f, 20f);
- GUI.Label(rect, "[C]", FxStyles.tickStyleCenter);
-
- point = new Vector2(0.497f, -0.629f) * radius + center;
- rect = new Rect(point.x - 10f, point.y - 10f, 20f, 20f);
- GUI.Label(rect, "[M]", FxStyles.tickStyleCenter);
- GUI.color = oldColor;
- }
- }
- }
- }
-
- public override void OnFrameData(RenderTexture source)
- {
- if (Application.isPlaying && !m_MonitorSettings.refreshOnPlay)
- return;
-
- if (Mathf.Approximately(m_MonitorAreaRect.width, 0) || Mathf.Approximately(m_MonitorAreaRect.height, 0))
- return;
-
- float ratio = (float)source.width / (float)source.height;
- int h = 384;
- int w = Mathf.FloorToInt(h * ratio);
-
- var rt = RenderTexture.GetTemporary(w, h, 0, source.format);
- Graphics.Blit(source, rt);
- ComputeVectorscope(rt);
- m_BaseEditor.Repaint();
- RenderTexture.ReleaseTemporary(rt);
- }
-
- void CreateBuffer(int width, int height)
- {
- m_Buffer = new ComputeBuffer(width * height, sizeof(uint));
- }
-
- void ComputeVectorscope(RenderTexture source)
- {
- if (m_Buffer == null)
- {
- CreateBuffer(source.width, source.height);
- }
- else if (m_Buffer.count != (source.width * source.height))
- {
- m_Buffer.Release();
- CreateBuffer(source.width, source.height);
- }
-
- var cs = m_ComputeShader;
-
- int kernel = cs.FindKernel("KVectorscopeClear");
- cs.SetBuffer(kernel, "_Vectorscope", m_Buffer);
- cs.SetVector("_Res", new Vector4(source.width, source.height, 0f, 0f));
- cs.Dispatch(kernel, Mathf.CeilToInt(source.width / 32f), Mathf.CeilToInt(source.height / 32f), 1);
-
- kernel = cs.FindKernel("KVectorscope");
- cs.SetBuffer(kernel, "_Vectorscope", m_Buffer);
- cs.SetTexture(kernel, "_Source", source);
- cs.SetInt("_IsLinear", GraphicsUtils.isLinearColorSpace ? 1 : 0);
- cs.SetVector("_Res", new Vector4(source.width, source.height, 0f, 0f));
- cs.Dispatch(kernel, Mathf.CeilToInt(source.width / 32f), Mathf.CeilToInt(source.height / 32f), 1);
-
- if (m_VectorscopeTexture == null || m_VectorscopeTexture.width != source.width || m_VectorscopeTexture.height != source.height)
- {
- GraphicsUtils.Destroy(m_VectorscopeTexture);
- m_VectorscopeTexture = new RenderTexture(source.width, source.height, 0, RenderTextureFormat.ARGB32, RenderTextureReadWrite.Linear)
- {
- hideFlags = HideFlags.DontSave,
- wrapMode = TextureWrapMode.Clamp,
- filterMode = FilterMode.Bilinear
- };
- }
-
- if (m_Material == null)
- m_Material = new Material(Shader.Find("Hidden/Post FX/Monitors/Vectorscope Render")) { hideFlags = HideFlags.DontSave };
-
- m_Material.SetBuffer("_Vectorscope", m_Buffer);
- m_Material.SetVector("_Size", new Vector2(m_VectorscopeTexture.width, m_VectorscopeTexture.height));
- }
- }
-}
+using UnityEditorInternal;
+using UnityEngine;
+using UnityEngine.PostProcessing;
+
+namespace UnityEditor.PostProcessing
+{
+ public class VectorscopeMonitor : PostProcessingMonitor
+ {
+ static GUIContent s_MonitorTitle = new GUIContent("Vectorscope");
+
+ ComputeShader m_ComputeShader;
+ ComputeBuffer m_Buffer;
+ Material m_Material;
+ RenderTexture m_VectorscopeTexture;
+ Rect m_MonitorAreaRect;
+
+ public VectorscopeMonitor()
+ {
+ m_ComputeShader = EditorResources.Load<ComputeShader>("Monitors/VectorscopeCompute.compute");
+ }
+
+ public override void Dispose()
+ {
+ GraphicsUtils.Destroy(m_Material);
+ GraphicsUtils.Destroy(m_VectorscopeTexture);
+
+ if (m_Buffer != null)
+ m_Buffer.Release();
+
+ m_Material = null;
+ m_VectorscopeTexture = null;
+ m_Buffer = null;
+ }
+
+ public override bool IsSupported()
+ {
+ return m_ComputeShader != null && GraphicsUtils.supportsDX11;
+ }
+
+ public override GUIContent GetMonitorTitle()
+ {
+ return s_MonitorTitle;
+ }
+
+ public override void OnMonitorSettings()
+ {
+ EditorGUI.BeginChangeCheck();
+
+ bool refreshOnPlay = m_MonitorSettings.refreshOnPlay;
+ float exposure = m_MonitorSettings.vectorscopeExposure;
+ bool showBackground = m_MonitorSettings.vectorscopeShowBackground;
+
+ refreshOnPlay = GUILayout.Toggle(refreshOnPlay, new GUIContent(FxStyles.playIcon, "Keep refreshing the vectorscope in play mode; this may impact performances."), FxStyles.preButton);
+ exposure = GUILayout.HorizontalSlider(exposure, 0.05f, 0.3f, FxStyles.preSlider, FxStyles.preSliderThumb, GUILayout.Width(40f));
+ showBackground = GUILayout.Toggle(showBackground, new GUIContent(FxStyles.checkerIcon, "Show an YUV background in the vectorscope."), FxStyles.preButton);
+
+ if (EditorGUI.EndChangeCheck())
+ {
+ Undo.RecordObject(m_BaseEditor.serializedObject.targetObject, "Vectorscope Settings Changed");
+ m_MonitorSettings.refreshOnPlay = refreshOnPlay;
+ m_MonitorSettings.vectorscopeExposure = exposure;
+ m_MonitorSettings.vectorscopeShowBackground = showBackground;
+ InternalEditorUtility.RepaintAllViews();
+ }
+ }
+
+ public override void OnMonitorGUI(Rect r)
+ {
+ if (Event.current.type == EventType.Repaint)
+ {
+ // If m_MonitorAreaRect isn't set the preview was just opened so refresh the render to get the vectoscope data
+ if (Mathf.Approximately(m_MonitorAreaRect.width, 0) && Mathf.Approximately(m_MonitorAreaRect.height, 0))
+ InternalEditorUtility.RepaintAllViews();
+
+ // Sizing
+ float size = 0f;
+
+ if (r.width < r.height)
+ {
+ size = m_VectorscopeTexture != null
+ ? Mathf.Min(m_VectorscopeTexture.width, r.width - 35f)
+ : r.width;
+ }
+ else
+ {
+ size = m_VectorscopeTexture != null
+ ? Mathf.Min(m_VectorscopeTexture.height, r.height - 25f)
+ : r.height;
+ }
+
+ m_MonitorAreaRect = new Rect(
+ Mathf.Floor(r.x + r.width / 2f - size / 2f),
+ Mathf.Floor(r.y + r.height / 2f - size / 2f - 5f),
+ size, size
+ );
+
+ if (m_VectorscopeTexture != null)
+ {
+ m_Material.SetFloat("_Exposure", m_MonitorSettings.vectorscopeExposure);
+
+ var oldActive = RenderTexture.active;
+ Graphics.Blit(null, m_VectorscopeTexture, m_Material, m_MonitorSettings.vectorscopeShowBackground ? 0 : 1);
+ RenderTexture.active = oldActive;
+
+ Graphics.DrawTexture(m_MonitorAreaRect, m_VectorscopeTexture);
+
+ var color = Color.white;
+ const float kTickSize = 10f;
+ const int kTickCount = 24;
+
+ float radius = m_MonitorAreaRect.width / 2f;
+ float midX = m_MonitorAreaRect.x + radius;
+ float midY = m_MonitorAreaRect.y + radius;
+ var center = new Vector2(midX, midY);
+
+ // Cross
+ color.a *= 0.5f;
+ Handles.color = color;
+ Handles.DrawLine(new Vector2(midX, m_MonitorAreaRect.y), new Vector2(midX, m_MonitorAreaRect.y + m_MonitorAreaRect.height));
+ Handles.DrawLine(new Vector2(m_MonitorAreaRect.x, midY), new Vector2(m_MonitorAreaRect.x + m_MonitorAreaRect.width, midY));
+
+ if (m_MonitorAreaRect.width > 100f)
+ {
+ color.a = 1f;
+
+ // Ticks
+ Handles.color = color;
+ for (int i = 0; i < kTickCount; i++)
+ {
+ float a = (float)i / (float)kTickCount;
+ float theta = a * (Mathf.PI * 2f);
+ float tx = Mathf.Cos(theta + (Mathf.PI / 2f));
+ float ty = Mathf.Sin(theta - (Mathf.PI / 2f));
+ var innerVec = center + new Vector2(tx, ty) * (radius - kTickSize);
+ var outerVec = center + new Vector2(tx, ty) * radius;
+ Handles.DrawAAPolyLine(3f, innerVec, outerVec);
+ }
+
+ // Labels (where saturation reaches 75%)
+ color.a = 1f;
+ var oldColor = GUI.color;
+ GUI.color = color * 2f;
+
+ var point = new Vector2(-0.254f, -0.750f) * radius + center;
+ var rect = new Rect(point.x - 10f, point.y - 10f, 20f, 20f);
+ GUI.Label(rect, "[R]", FxStyles.tickStyleCenter);
+
+ point = new Vector2(-0.497f, 0.629f) * radius + center;
+ rect = new Rect(point.x - 10f, point.y - 10f, 20f, 20f);
+ GUI.Label(rect, "[G]", FxStyles.tickStyleCenter);
+
+ point = new Vector2(0.750f, 0.122f) * radius + center;
+ rect = new Rect(point.x - 10f, point.y - 10f, 20f, 20f);
+ GUI.Label(rect, "[B]", FxStyles.tickStyleCenter);
+
+ point = new Vector2(-0.750f, -0.122f) * radius + center;
+ rect = new Rect(point.x - 10f, point.y - 10f, 20f, 20f);
+ GUI.Label(rect, "[Y]", FxStyles.tickStyleCenter);
+
+ point = new Vector2(0.254f, 0.750f) * radius + center;
+ rect = new Rect(point.x - 10f, point.y - 10f, 20f, 20f);
+ GUI.Label(rect, "[C]", FxStyles.tickStyleCenter);
+
+ point = new Vector2(0.497f, -0.629f) * radius + center;
+ rect = new Rect(point.x - 10f, point.y - 10f, 20f, 20f);
+ GUI.Label(rect, "[M]", FxStyles.tickStyleCenter);
+ GUI.color = oldColor;
+ }
+ }
+ }
+ }
+
+ public override void OnFrameData(RenderTexture source)
+ {
+ if (Application.isPlaying && !m_MonitorSettings.refreshOnPlay)
+ return;
+
+ if (Mathf.Approximately(m_MonitorAreaRect.width, 0) || Mathf.Approximately(m_MonitorAreaRect.height, 0))
+ return;
+
+ float ratio = (float)source.width / (float)source.height;
+ int h = 384;
+ int w = Mathf.FloorToInt(h * ratio);
+
+ var rt = RenderTexture.GetTemporary(w, h, 0, source.format);
+ Graphics.Blit(source, rt);
+ ComputeVectorscope(rt);
+ m_BaseEditor.Repaint();
+ RenderTexture.ReleaseTemporary(rt);
+ }
+
+ void CreateBuffer(int width, int height)
+ {
+ m_Buffer = new ComputeBuffer(width * height, sizeof(uint));
+ }
+
+ void ComputeVectorscope(RenderTexture source)
+ {
+ if (m_Buffer == null)
+ {
+ CreateBuffer(source.width, source.height);
+ }
+ else if (m_Buffer.count != (source.width * source.height))
+ {
+ m_Buffer.Release();
+ CreateBuffer(source.width, source.height);
+ }
+
+ var cs = m_ComputeShader;
+
+ int kernel = cs.FindKernel("KVectorscopeClear");
+ cs.SetBuffer(kernel, "_Vectorscope", m_Buffer);
+ cs.SetVector("_Res", new Vector4(source.width, source.height, 0f, 0f));
+ cs.Dispatch(kernel, Mathf.CeilToInt(source.width / 32f), Mathf.CeilToInt(source.height / 32f), 1);
+
+ kernel = cs.FindKernel("KVectorscope");
+ cs.SetBuffer(kernel, "_Vectorscope", m_Buffer);
+ cs.SetTexture(kernel, "_Source", source);
+ cs.SetInt("_IsLinear", GraphicsUtils.isLinearColorSpace ? 1 : 0);
+ cs.SetVector("_Res", new Vector4(source.width, source.height, 0f, 0f));
+ cs.Dispatch(kernel, Mathf.CeilToInt(source.width / 32f), Mathf.CeilToInt(source.height / 32f), 1);
+
+ if (m_VectorscopeTexture == null || m_VectorscopeTexture.width != source.width || m_VectorscopeTexture.height != source.height)
+ {
+ GraphicsUtils.Destroy(m_VectorscopeTexture);
+ m_VectorscopeTexture = new RenderTexture(source.width, source.height, 0, RenderTextureFormat.ARGB32, RenderTextureReadWrite.Linear)
+ {
+ hideFlags = HideFlags.DontSave,
+ wrapMode = TextureWrapMode.Clamp,
+ filterMode = FilterMode.Bilinear
+ };
+ }
+
+ if (m_Material == null)
+ m_Material = new Material(Shader.Find("Hidden/Post FX/Monitors/Vectorscope Render")) { hideFlags = HideFlags.DontSave };
+
+ m_Material.SetBuffer("_Vectorscope", m_Buffer);
+ m_Material.SetVector("_Size", new Vector2(m_VectorscopeTexture.width, m_VectorscopeTexture.height));
+ }
+ }
+}
--
Gitblit v1.8.0