From 49aef432e7d694549d88bf203d4b754a07894077 Mon Sep 17 00:00:00 2001 From: hecomi Date: Sun, 20 Nov 2016 15:59:06 +0900 Subject: [PATCH] improve performance. --- .../Scripts/MultipleMonitorRoundLayouter.cs | 4 ++- Assets/uDesktopDuplication/Scripts/Manager.cs | 29 ++++++++++++------- Assets/uDesktopDuplication/Scripts/Monitor.cs | 5 +++- 3 files changed, 26 insertions(+), 12 deletions(-) diff --git a/Assets/uDesktopDuplication/Examples/Scripts/MultipleMonitorRoundLayouter.cs b/Assets/uDesktopDuplication/Examples/Scripts/MultipleMonitorRoundLayouter.cs index 1a94014..b8b23d9 100644 --- a/Assets/uDesktopDuplication/Examples/Scripts/MultipleMonitorRoundLayouter.cs +++ b/Assets/uDesktopDuplication/Examples/Scripts/MultipleMonitorRoundLayouter.cs @@ -3,6 +3,8 @@ using MeshForwardDirection = uDesktopDuplication.Texture.MeshForwardDirection; public class MultipleMonitorRoundLayouter : MultipleMonitorLayouter { + [SerializeField] bool debugDraw = true; + public float radius = 10f; public Vector3 offsetAngle = Vector3.zero; @@ -80,7 +82,7 @@ public class MultipleMonitorRoundLayouter : MultipleMonitorLayouter protected override void Update() { base.Update(); - DebugDraw(); + if (debugDraw) DebugDraw(); } void DebugDraw() diff --git a/Assets/uDesktopDuplication/Scripts/Manager.cs b/Assets/uDesktopDuplication/Scripts/Manager.cs index c4e2e31..eb119f0 100644 --- a/Assets/uDesktopDuplication/Scripts/Manager.cs +++ b/Assets/uDesktopDuplication/Scripts/Manager.cs @@ -15,15 +15,17 @@ public class Manager : MonoBehaviour public static Manager CreateInstance() { - if (instance_) { - return instance_; - } + if (instance_ != null) return instance_; var manager = FindObjectOfType(); - if (manager) return manager; + if (manager) { + instance_ = manager; + return manager; + } var go = new GameObject("uDesktopDuplicationManager"); - return go.AddComponent(); + instance_ = go.AddComponent(); + return instance_; } private List monitors_ = new List(); @@ -74,10 +76,16 @@ public class Manager : MonoBehaviour void Awake() { // for simple singleton - if (instance_ != null) { + + if (instance_ == this) { + return; + } + + if (instance_ != null && instance_ != this) { Destroy(gameObject); return; } + instance_ = this; Lib.SetDebugMode(debugMode); @@ -134,11 +142,12 @@ public class Manager : MonoBehaviour for (int i = 0; i < monitors.Count; ++i) { var monitor = monitors[i]; + var state = monitor.state; if ( - monitor.state == MonitorState.NotSet || - monitor.state == MonitorState.AccessLost || - monitor.state == MonitorState.AccessDenied || - monitor.state == MonitorState.SessionDisconnected + state == MonitorState.NotSet || + state == MonitorState.AccessLost || + state == MonitorState.AccessDenied || + state == MonitorState.SessionDisconnected ) { reinitializeNeeded = true; break; diff --git a/Assets/uDesktopDuplication/Scripts/Monitor.cs b/Assets/uDesktopDuplication/Scripts/Monitor.cs index 70fd618..27f3beb 100644 --- a/Assets/uDesktopDuplication/Scripts/Monitor.cs +++ b/Assets/uDesktopDuplication/Scripts/Monitor.cs @@ -240,6 +240,7 @@ public class Monitor } private Texture2D texture_; + private System.IntPtr texturePtr_; public Texture2D texture { get @@ -253,7 +254,7 @@ public class Monitor public void Render() { if (texture_ && available) { - Lib.SetTexturePtr(id, texture_.GetNativeTexturePtr()); + Lib.SetTexturePtr(id, texturePtr_); GL.IssuePluginEvent(Lib.GetRenderEventFunc(), id); } } @@ -290,6 +291,7 @@ public class Monitor var w = isHorizontal ? width : height; var h = isHorizontal ? height : width; texture_ = new Texture2D(w, h, TextureFormat.BGRA32, false); + texturePtr_ = texture_.GetNativeTexturePtr(); } public void DestroyTexture() @@ -297,6 +299,7 @@ public class Monitor if (texture_) { Object.Destroy(texture_); texture_ = null; + texturePtr_ = System.IntPtr.Zero; } }