From ea8c069d68adb92d7cee3d130c7e20902e52ed10 Mon Sep 17 00:00:00 2001 From: drewcassidy Date: Thu, 12 Nov 2020 20:10:40 -0800 Subject: [PATCH] Fix issues with fallback fonts Fixed TMP subobjects being deleted, causing fallback fonts to fail in some situations. closes #24 --- .../Plugins/ConformalDecals.dll | Bin 84480 -> 84480 bytes .../Versioning/ConformalDecals.version | 2 +- README.md | 2 +- Source/ConformalDecals/DecalConfig.cs | 6 +++--- Source/ConformalDecals/Text/FontLoader.cs | 1 - Source/ConformalDecals/Text/TextRenderer.cs | 19 +++++++++++++++++- changelog.txt | 5 +++++ 7 files changed, 28 insertions(+), 7 deletions(-) diff --git a/GameData/ConformalDecals/Plugins/ConformalDecals.dll b/GameData/ConformalDecals/Plugins/ConformalDecals.dll index c37cd9dce2d64928a1b1508d1213b447dd94672a..902be6de71d00c960d0329a77c1bb7027f829f59 100644 GIT binary patch delta 23437 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 diff --git a/GameData/ConformalDecals/Versioning/ConformalDecals.version b/GameData/ConformalDecals/Versioning/ConformalDecals.version index 30db53b..2f9b497 100644 --- a/GameData/ConformalDecals/Versioning/ConformalDecals.version +++ b/GameData/ConformalDecals/Versioning/ConformalDecals.version @@ -6,7 +6,7 @@ { "MAJOR":0, "MINOR":2, - "PATCH":2, + "PATCH":3, "BUILD":0 }, "KSP_VERSION": diff --git a/README.md b/README.md index f033670..c2c2508 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Conformal Decals v0.2.2 +# Conformal Decals v0.2.3 [![Build Status](https://travis-ci.org/drewcassidy/KSP-Conformal-Decals.svg?branch=release)](https://travis-ci.org/drewcassidy/KSP-Conformal-Decals) [![Art: CC BY-SA 4.0](https://img.shields.io/badge/Art%20License-CC%20BY--SA%204.0-orange.svg)](https://creativecommons.org/licenses/by-sa/4.0/) [![Code: GPL v3](https://img.shields.io/badge/Code%20License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0) ![Screenshot](http://pileof.rocks/KSP/images/ConformalDecalsHeader.png) diff --git a/Source/ConformalDecals/DecalConfig.cs b/Source/ConformalDecals/DecalConfig.cs index bdddb65..ec66d63 100644 --- a/Source/ConformalDecals/DecalConfig.cs +++ b/Source/ConformalDecals/DecalConfig.cs @@ -93,7 +93,7 @@ namespace ConformalDecals { _shaderBlacklist.Add(shaderName); } } - + var allFonts = Resources.FindObjectsOfTypeAll(); ParseUtil.ParseStringIndirect(ref _fallbackFontName, node, "fallbackFont"); FallbackFont = allFonts.First(o => o.name == _fallbackFontName); @@ -103,14 +103,14 @@ namespace ConformalDecals { try { var name = ParseUtil.ParseString(fontNode, "name"); if (string.IsNullOrEmpty(name)) throw new FormatException(); - + var fontAsset = allFonts.First(o => o.name == name); if (fontAsset == null) throw new FormatException($"Could not find font asset named {name}"); if (!fontAsset.fallbackFontAssets.Contains(FallbackFont)) { fontAsset.fallbackFontAssets.Add(FallbackFont); } - + var font = new DecalFont(name, fontNode, fontAsset); _fontList.Add(font.Name, font); } diff --git a/Source/ConformalDecals/Text/FontLoader.cs b/Source/ConformalDecals/Text/FontLoader.cs index 72ef4a1..9ab93a5 100644 --- a/Source/ConformalDecals/Text/FontLoader.cs +++ b/Source/ConformalDecals/Text/FontLoader.cs @@ -29,7 +29,6 @@ namespace ConformalDecals.Text { var loadedFonts = bundle.LoadAllAssets(); foreach (var font in loadedFonts) { Logging.Log($"Adding font {font.name}"); - font.fallbackFontAssets.Add(FallbackFont); } } diff --git a/Source/ConformalDecals/Text/TextRenderer.cs b/Source/ConformalDecals/Text/TextRenderer.cs index f81c3c6..8915905 100644 --- a/Source/ConformalDecals/Text/TextRenderer.cs +++ b/Source/ConformalDecals/Text/TextRenderer.cs @@ -89,9 +89,11 @@ namespace ConformalDecals.Text { if (SystemInfo.graphicsDeviceType == GraphicsDeviceType.Direct3D11 || SystemInfo.graphicsDeviceType == GraphicsDeviceType.Direct3D12) { textRenderTextureFormat = RenderTextureFormat.ARGB32; // DirectX is dumb } + if (!SystemInfo.SupportsTextureFormat(textTextureFormat)) { Logging.LogError($"Text texture format {textTextureFormat} not supported on this platform."); } + if (!SystemInfo.SupportsRenderTextureFormat(textRenderTextureFormat)) { Logging.LogError($"Text texture format {textRenderTextureFormat} not supported on this platform."); } @@ -279,9 +281,24 @@ namespace ConformalDecals.Text { // CLEAR SUBMESHES for (int i = 0; i < transform.childCount; i++) { - Destroy(transform.GetChild(i).gameObject); + var child = transform.GetChild(i); + var renderer = child.GetComponent(); + var filter = child.GetComponent(); + if (filter == null || renderer == null) { + Logging.Log("TMP Sub object has no filter or renderer, destroying"); + Destroy(child.gameObject); + } + + if (filter.mesh.vertexCount < 3) { + Logging.Log("TMP Sub object has no mesh, destroying"); + Destroy(child.gameObject); + } + + renderer.enabled = false; } + _tmp.ClearMesh(true); + return new TextRenderOutput(texture, window); } } diff --git a/changelog.txt b/changelog.txt index fc0cfa2..fe74d19 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,8 @@ +v0.2.3 +------ +- Fixes: + - Fixed TMP subobjects being deleted, causing fallback fonts to fail in some situations. + v0.2.2 ------ - Fixes: