From d5b100cd4b0f957e176389288a9902c135c30c27 Mon Sep 17 00:00:00 2001 From: Shawdooow Date: Sun, 21 Nov 2021 04:37:12 -0500 Subject: [PATCH] add back old # system --- vke/src/ShaderInfo.cs | 3 ++- vke/src/Utils.cs | 17 ++++++++++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/vke/src/ShaderInfo.cs b/vke/src/ShaderInfo.cs index 7cc498b..6e7a41e 100644 --- a/vke/src/ShaderInfo.cs +++ b/vke/src/ShaderInfo.cs @@ -43,7 +43,8 @@ namespace vke { /// /// vke Device /// Stage flags. - /// path to a compiled SpirV Shader on disk or as embedded ressource if path contains ':' (ex; Assembly:shader.vert.spv) + /// path to a compiled SpirV Shader on disk or as embedded ressource if path starts with '#' (ex; #Assembly.shader.vert.spv) + /// or contains ':' (ex; Assembly:shader.vert.spv) /// Specialization info /// shader entry point, 'main' by default. public ShaderInfo (Device dev, VkShaderStageFlags _stageFlags, string _spirvPath, SpecializationInfo specializationInfo = null, string entryPoint = "main"): diff --git a/vke/src/Utils.cs b/vke/src/Utils.cs index fc16876..405c73b 100644 --- a/vke/src/Utils.cs +++ b/vke/src/Utils.cs @@ -40,8 +40,23 @@ namespace Vulkan { /// Use ':' to split assembly and resource (ex; "Assembly:shader.vert.spv") /// /// The stream from path. - /// The file or stream path. Embedded resource path contains ':'. + /// The file or stream path. Embedded resource path starts with '#' or contains ':'. public static Stream GetStreamFromPath (string path) { + if (path.StartsWith("#", StringComparison.Ordinal)) + { + Stream stream = null; + string resId = path.Substring(1); + if (tryFindResource(Assembly.GetEntryAssembly(), resId, out stream)) + return stream; + string[] assemblyNames = resId.Split('.'); + Assembly assembly = AppDomain.CurrentDomain.GetAssemblies().FirstOrDefault(aa => aa.GetName().Name == assemblyNames[0]); + if (assembly == null && assemblyNames.Length > 3) + assembly = AppDomain.CurrentDomain.GetAssemblies() + .FirstOrDefault(aa => aa.GetName().Name == $"{assemblyNames[0]}.{assemblyNames[1]}"); + if (assembly != null && tryFindResource(assembly, resId, out stream)) + return stream; + throw new Exception("Resource not found: " + path); + } if (path.Contains(":", StringComparison.Ordinal)) { Stream stream = null; string[] assemblyNames = path.Split (':'); -- 2.47.3