/// <summary> /// Function to load the associated sprite texture based on the project metadata. /// </summary> /// <param name="graphics">The graphics interface to use when looking up or creating the texture.</param> /// <param name="fileSystem">The file system containing the file to load.</param> /// <param name="metadata">The metadata for the project.</param> /// <param name="imagePath">The path to the image.</param> /// <param name="usage">The intended usage for the texture.</param> /// <param name="codecs">The list of available codecs.</param> /// <returns>A new texture containing the sprite texture data.</returns> private static GorgonTexture2D GetTexture(GorgonGraphics graphics, IGorgonFileSystem fileSystem, IProjectMetadata metadata, string imagePath, ResourceUsage usage, IReadOnlyDictionary <string, IGorgonImageCodec> codecs) { bool shouldConvertToPremultiplied = false; // First, check to see if this texture isn't already loaded into memory. GorgonTexture2D texture = graphics.LocateResourcesByName <GorgonTexture2D>(imagePath).FirstOrDefault(); if (texture != null) { return(texture); } if (!metadata.ProjectItems.TryGetValue(imagePath, out ProjectItemMetadata textureMetadata)) { return(null); } if (textureMetadata.Attributes.TryGetValue("PremultipliedAlpha", out string isPremultiplied)) { #pragma warning disable CA1806 // Do not ignore method results bool.TryParse(isPremultiplied, out shouldConvertToPremultiplied); #pragma warning restore CA1806 // Do not ignore method results } if ((!textureMetadata.Attributes.TryGetValue(CommonEditorConstants.ContentTypeAttr, out string contentType)) || (!string.Equals(contentType, CommonEditorContentTypes.ImageType, StringComparison.OrdinalIgnoreCase)) || (!textureMetadata.Attributes.TryGetValue("ImageCodec", out string imageCodecTypeName)) || (!codecs.TryGetValue(imageCodecTypeName, out IGorgonImageCodec codec))) { return(null); } IGorgonVirtualFile file = fileSystem.GetFile(imagePath); if (file == null) { return(null); } using (Stream fileStream = file.OpenStream()) { texture = GorgonTexture2D.FromStream(graphics, fileStream, codec, file.Size, new GorgonTexture2DLoadOptions { ConvertToPremultipliedAlpha = shouldConvertToPremultiplied, IsTextureCube = false, Name = file.FullPath, Binding = TextureBinding.ShaderResource, Usage = (((usage & ResourceUsage.None) == ResourceUsage.None) || ((usage & ResourceUsage.Staging) == ResourceUsage.Staging)) ? ResourceUsage.Default : usage }); } return(texture); }