Exemplo n.º 1
0
        private static bool TryCreateExactNamespaceTexture(UpperString name, ResourceNamespace resourceNamespace,
                                                           out Texture texture)
        {
            if (loadedImages.TryGetValue(name, resourceNamespace, out RgbaImage loadedImage))
            {
                texture = CreateAndTrackTexture(name, resourceNamespace, loadedImage);
                return(true);
            }

            if (TextureDefinitionManager.TryGetExact(name, resourceNamespace, out TextureDefinition definition))
            {
                RgbaImage compiledImage = TextureDefinitionToImage(definition);
                loadedImages.Add(name, resourceNamespace, compiledImage);
                texture = CreateAndTrackTexture(name, resourceNamespace, compiledImage);
                return(true);
            }

            if (Data.TryFindExact(name, resourceNamespace, out IEntry entry))
            {
                if (TryReadImageEntry(entry, resourceNamespace, out RgbaImage newImage))
                {
                    loadedImages.Add(name, resourceNamespace, newImage);
                    texture = CreateAndTrackTexture(name, resourceNamespace, newImage);
                    return(true);
                }
            }

            texture = null;
            return(false);
        }
Exemplo n.º 2
0
        public static bool TryGetTexture(UpperString name, ResourceNamespace priorityNamespace,
                                         out Texture texture)
        {
            if (textures.TryGetValue(name, priorityNamespace, out texture))
            {
                return(true);
            }

            // This is a heuristic to make failed lookups less expensive, as
            // there is a lot of work done to create the texture if it does
            // not exist after this.
            if (missingTextureNames.Contains(name))
            {
                texture = NullTexture;
                return(false);
            }

            if (TryCreateExactNamespaceTexture(name, priorityNamespace, out texture))
            {
                textures.Add(name, priorityNamespace, texture);
                return(true);
            }

            if (textures.TryGetAnyValue(name, out texture, out _))
            {
                return(true);
            }

            if (TryCreateAnyNamespaceTexture(name, out texture, out ResourceNamespace newNamespace))
            {
                textures.Add(name, newNamespace, texture);
                return(true);
            }

            missingTextureNames.Add(name);

            texture = NullTexture;
            return(false);
        }
 public static bool TryGetExact(UpperString name, ResourceNamespace resourceNamespace,
                                out TextureDefinition definition)
 {
     return(textureDefinitions.TryGetValue(name, resourceNamespace, out definition));
 }