/// </summary>
/// <param name="dev">vke Device</param>
/// <param name="_stageFlags">Stage flags.</param>
- /// <param name="_spirvPath">path to a compiled SpirV Shader on disk or as embedded ressource if path contains ':' (ex; Assembly:shader.vert.spv)</param>
+ /// <param name="_spirvPath">path to a compiled SpirV Shader on disk or as embedded ressource if path starts with '#' (ex; #Assembly.shader.vert.spv)</param>
+ /// or contains ':' (ex; Assembly:shader.vert.spv)</param>
/// <param name="specializationInfo">Specialization info</param>
/// <param name="entryPoint">shader entry point, 'main' by default.</param>
public ShaderInfo (Device dev, VkShaderStageFlags _stageFlags, string _spirvPath, SpecializationInfo specializationInfo = null, string entryPoint = "main"):
/// Use ':' to split assembly and resource (ex; "Assembly:shader.vert.spv")
/// </summary>
/// <returns>The stream from path.</returns>
- /// <param name="path">The file or stream path. Embedded resource path contains ':'.</param>
+ /// <param name="path">The file or stream path. Embedded resource path starts with '#' or contains ':'.</param>
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 (':');