From 5faa26ae955def58ee9207dd008b89bf68608dbe Mon Sep 17 00:00:00 2001 From: drewcassidy Date: Sun, 27 Sep 2020 00:48:39 -0700 Subject: [PATCH] TextRenderer cleanup --- .../Plugins/ConformalDecals.dll | Bin 87552 -> 87040 bytes Source/ConformalDecals/Text/TextRenderer.cs | 46 ++++++------------ 2 files changed, 14 insertions(+), 32 deletions(-) diff --git a/GameData/ConformalDecals/Plugins/ConformalDecals.dll b/GameData/ConformalDecals/Plugins/ConformalDecals.dll index 2f10c587bf308ebf25da899f6340d2a965b07581..ea24bea391aef536a67d2f2dda76f9146a41ecf3 100644 GIT binary patch delta 13705 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 diff --git a/Source/ConformalDecals/Text/TextRenderer.cs b/Source/ConformalDecals/Text/TextRenderer.cs index 82fab44..44d1d62 100644 --- a/Source/ConformalDecals/Text/TextRenderer.cs +++ b/Source/ConformalDecals/Text/TextRenderer.cs @@ -1,5 +1,4 @@ using System; -using System.Reflection; using System.Collections.Generic; using TMPro; using UnityEngine; @@ -38,6 +37,7 @@ namespace ConformalDecals.Text { private static readonly Dictionary RenderCache = new Dictionary(); private static readonly Queue RenderJobs = new Queue(); + // Update text using the job queue public static TextRenderJob UpdateText(DecalText oldText, DecalText newText, UnityAction renderFinishedCallback) { if (newText == null) throw new ArgumentNullException(nameof(newText)); @@ -46,6 +46,7 @@ namespace ConformalDecals.Text { return job; } + // Update text immediately without using job queue public static TextRenderOutput UpdateTextNow(DecalText oldText, DecalText newText) { if (newText == null) throw new ArgumentNullException(nameof(newText)); @@ -74,16 +75,6 @@ namespace ConformalDecals.Text { DontDestroyOnLoad(gameObject); } - private void Update() { - // TODO: ASYNC RENDERING - // bool renderNeeded; - // do { - // if (RenderJobs.Count == 0) return; - // var nextJob = RenderJobs.Dequeue(); - // RunJob(nextJob, out renderNeeded); - // } while (!renderNeeded); - } - private void Setup() { if (_isSetup) return; @@ -98,6 +89,7 @@ namespace ConformalDecals.Text { _isSetup = true; } + // Run a text render job private TextRenderOutput RunJob(TextRenderJob job, out bool renderNeeded) { if (!job.Needed) { renderNeeded = false; @@ -131,32 +123,27 @@ namespace ConformalDecals.Text { // now that all old references are handled, begin rendering the new output - if (RenderCache.TryGetValue(job.NewText, out var cachedRender)) { - Debug.Log("Using Cached Render Output"); - Debug.Log($"Finished Text Rendering Job. queue depth = {RenderJobs.Count}, cache size = {RenderCache.Count}"); - - cachedRender.UserCount++; - job.Finish(cachedRender); + if (RenderCache.TryGetValue(job.NewText, out var renderOutput)) { renderNeeded = false; - return cachedRender; } + else { + renderNeeded = true; - var output = RenderText(job.NewText, texture); - output.UserCount++; - RenderCache.Add(job.NewText, output); + renderOutput = RenderText(job.NewText, texture); + RenderCache.Add(job.NewText, renderOutput); + } - job.Finish(output); - Debug.Log($"Finished Text Rendering Job. queue depth = {RenderJobs.Count}, cache size = {RenderCache.Count}"); - renderNeeded = true; - return output; + renderOutput.UserCount++; + + job.Finish(renderOutput); + return renderOutput; } + // Render a piece of text to a given texture public TextRenderOutput RenderText(DecalText text, Texture2D texture) { if (text == null) throw new ArgumentNullException(nameof(text)); if (_tmp == null) throw new InvalidOperationException("TextMeshPro object not yet created."); - Debug.Log($"[ConformalDecals] rendering text '{text.Text}' in {text.Font.Name}"); - // SETUP TMP OBJECT FOR RENDERING _tmp.text = text.FormattedText; _tmp.font = text.Font.FontAsset; @@ -181,7 +168,6 @@ namespace ConformalDecals.Text { var bounds = new Bounds(); - Debug.Log($"meshFilter count: {meshFilters.Length}"); // SETUP MATERIALS AND BOUNDS for (int i = 0; i < meshFilters.Length; i++) { var renderer = meshFilters[i].gameObject.GetComponent(); @@ -215,8 +201,6 @@ namespace ConformalDecals.Text { return new TextRenderOutput(Texture2D.blackTexture, Rect.zero); } - Debug.Log($"Texture size: {textureSize}"); - // make sure texture isnt too big, scale it down if it is // this is just so you dont crash the game by pasting in the entire script of The Bee Movie if (textureSize.x > MaxTextureSize) { @@ -238,8 +222,6 @@ namespace ConformalDecals.Text { center = (Vector2) textureSize / 2 }; - Debug.Log($"Window size: {window.size}"); - // SETUP TEXTURE if (texture == null) { texture = new Texture2D(textureSize.x, textureSize.y, TextTextureFormat, true);