XaAES: Support d'un système de cache de textures

XaAES: cache de textures

  • Améliorer le chargement des bitmap (textures) en stockant les fichiers .img déjà convertis en fonction du mode vidéo actuel

Mise à jour

Réécriture totale pour :

  • Utiliser AES-home_path/cache au lieu de /var/cache/xaaes
  • Utiliser les noms de fichiers filename.depth au lieu de noms longs
  • Ne plus utiliser XATTR

Ancienne version ci-dessous

Comme j'utilise ARAnyM, j'ignore à quel point ce patch peut être efficace sur du vrai matériel

Comment

  • Une nouvelle variable est ajoutée dans xaaes.cnf : textures_cache = <0|1> (booléen). Lorsque le cache est désactivé (0), aucun nouveau code n'est exécuté. Évidemment, textures doit être activé (non zéro)
  • Un répertoire /var/cache/xaaes/ doit être créé à la main (sinon les fichiers ne sont pas ajoutés au cache). Aucun autre dossier n'est requis (pour limiter le nombre d'opérations sur le système de fichiers)

Pourquoi ne pas utiliser AES-home_path/widthheight.depth ? L'utilisateur peut basculer de 1024x768x32 vers 640x480x32 mais les fichiers du cache seront les mêmes

Pourquoi /var/cache/xaaes? 1) C'est davantage conforme à FHS W , 2) Pas besoin de nouvelle variable pour spécifier le chemin, 3) À mon avis, le répertoire système de MiNT n'est pas le bon endroit pour placer ce genre de fichiers

Prérequis

  • Noms de fichiers longs, car les fichiers sont nommés xxxxyyyyyyyyppp.zzz.

Pour créer un nom de fichier rapidement, j'utilise les champs dev (int16) et index (int32) de XATTR (attributs étendus) car à eux deux ils identifient un fichier de manière unique.

Par conséquent, il n'est pas nécessaire de stocker d'index : le nom du fichier EST l'index.

Donc, la longueur du nom de fichier est au minimum 4 (xxxx) + 8 (yyyyyyyy) = 12 caractères (sans extension) ppp est le nom de la palette (sans chemin d'accès). Inutilisé si nplanes>8

Sans cette info, le résultat pourrait être faux dans les modes <= 256 couleurs. Exemple :

  • définir palette=gem
  • lancer, le cache est rempli avec les bitmaps prérendus pour la palette 'gem'
  • définir palette=nvdi
  • lancer, le cache renvoie les bitmaps prérendus avec la palette 'gem'

zzz est le nombre de plans afin de pouvoir mettre en cache le même fichier pour chaque profondeur de couleurs dans un même dossier

Le patch

Aucun nouveau fichier, 3 modifiés :

Fonctionnement interne

load_image()

Implémentation actuelle Implémentation avec patch
+ image_cache_get. Si succès, retour. Sinon, poursuivre
= décompresser fichier = décompresser fichier
= remapper les couleurs = remapper les couleurs
= changer le format des pixels = changer le format des pixels
+ image_cache_put

image_cache_get()

  • ouvrir le fichier /var/cache/xaaes/<dev><index><palette>.<depth> (s'il existe)
  • vérifier les taille, date, heure (attributs) (ceux du fichier source sont déjà connus car ils sont nécessaires pour définir le nom du fichier)
  • si les informations correspondent, renvoyer les données, sinon, supprimer le fichier erroné/plus à jour

image_cache_put()

  • écrire le fichier /var/cache/xaaes/<dev><index><palette>.<depth>

Format de fichier

<XATTR><XAMFDB><DATA>

Dans XATTR, les date et heure de dernier accès sont définis à 'XC01' (XaAES Cache v0.1) comme valeur magique

Pourquoi ? les date/heure d'accès peuvent être actualisées sans que le fichier ne change, cette info ne doit pas être contrôlée

Une valeur magique permet des évolutions futures (p.ex. si un prochain code s'attend à trouver XC02, image_cache_get va automatiquement supprimer tous les anciens XC01 et image_cache_put créera les nouveaux XC02)

Remarques

  • Les fichiers présents dans le cache ne sont pas supprimés automatiquement Si de nombreuses images génèrent des fichiers dans le cache, et que ces images sont supprimées, les fichiers en cache restent présents : il n'y a pas de date d'expiration ni de quota sur le dossier du cache
  • Le cache doit également être effacé si vous éditez xaaes.cnfpour modifier la palette personnalisée. J'ai essayé de mettre le nom du fichier de la palette dans le nom complet du fichier en cache, mais bien que ça marche si la palette est définie dans xaaes.cnf, il peut y avoir des problèmes après le chargement d'une nouvelle palette avec ctrl-alt-shift-P. Si un .img est chargé APRÈS le changement de palette, le nom du fichier en cache contiendra le nom de la palette tel qu'il est dans xaaes.cnf mais le bitmap sera remappé avec la palette nouvellement chargée.

Téléchargements : Patch Binaires

Article précédent Article suivant