Question

Je programme actuellement une application pour un processeur 32 bits à mémoire limitée (512k flash, 32k de RAM).

Le display sur cet appareil est en 128x160 avec des couleurs 16 bits, ce qui prendrait normalement 40 Ko de RAM si je devais le mettre en tampon sur mon processeur. Je n'ai pas beaucoup de RAM, je recherche donc des techniques, des astuces, des astuces et des idées pour générer des données d'écran à la volée.

Ce qui pourrait aider:

  • Peut-être connaissez-vous une ressource pour ce type de limitation
  • Peut-être avez-vous généré des graphismes attractifs à la volée
  • Existe-t-il un algorithme générique que je pourrais utiliser pour combiner des éléments de la mémoire de programme (y compris la fusion alpha) à la volée lors du balayage de l'affichage
  • Techniques de rendu vectoriel simples (ou source libre (bsd / mit / apache))
  • ???

J'ai un multiplicateur, mais pas de processeur à virgule flottante. L’affichage lui-même a un contrôleur très simple et une mémoire pour l’affichage, mais les lectures et les écritures coûtent cher, donc je ne veux pas l’utiliser comme espace de travail si je peux l’éviter.

-Adam

Était-ce utile?

La solution

D'une certaine manière, vous êtes à peu près dans la même situation que les développeurs de jeux vidéo à l'époque des Tandys, des Spectrum et des premiers PC. Alors, voici ma recommandation:

Vous devriez lire les écrits de Michael Abrash sur des graphiques informatiques. Ils ont été écrits à une époque où un coprocesseur à virgule flottante était une pièce facultative du matériel et décrivaient bon nombre des techniques de base (lignes de Bresenham, etc.) utilisées dans les vieux jours (supposés «mauvais»). .

Vous pouvez lire la plupart de ses "Livres noirs". ici .

De plus, vous pouvez probablement trouver une grande partie des anciens fichiers BBS que la plupart des gens utilisaient à l’époque pour apprendre la programmation graphique ici . Recherchez simplement des graphiques, des lignes et tout ce qui ne l’est pas.

J'espère que ça aide!

Mise à jour: Je me souviens également d'utiliser this dans mes premières tentatives de dessiner des choses sur l'écran. Je ne peux pas dire combien de temps j'ai passé à essayer de comprendre les calculs derrière tout ça (enfin, pour être juste, j'avais 15 ans à l'époque). Très bonne (et simple) introduction à la 3D et très bon premier ministre sur les transformations, les remplissages de polygones et l’interpolation.

Autres conseils

Quel type de données allez-vous afficher à l'écran?

S'il ne s'agit pas d'images photographiques, vous pouvez envisager d'utiliser une palette. Par exemple: une palette de 256 couleurs utilisant 8 bits par pixel nécessiterait 20 Ko (plus 256 x 2 octets pour la table de consultation), ce qui est au moins supérieur à 40 Ko.

Je pense que la technique de base pour traiter ce type de situation consiste à diviser l'écran en bandes horizontales étroites et à ne mettre en mémoire tampon que deux bandes de ce type dans la mémoire vive. Une bande sera affichée pendant que vous rendrez la suivante. Lorsque le "rayon" de balayage atteint la bande suivante (et déclenche une interruption à capturer), vous permutez les deux et commencez à dessiner la bande suivante.

Un effet secondaire désagréable de cela est que vous avez des (durs) des limites temporelles sur le temps que vous pouvez consacrer au rendu de chaque bande. Donc, je suppose qu’il serait tentant de rester avec quelque chose d’ennuyeux mais avec des performances prévisibles, comme des sprites.

Un peu hors-sujet, mais c’est ainsi que fonctionne le matériel Nintendo DS 3D. Vous pouvez le voir si vous essayez de générer un trop grand nombre de polygones autour de la même coordonnée y: les polys clignoteront de manière aléatoire et disparaîtront au fur et à mesure que l'actualisation de l'écran dépasse le matériel de rendu.

De plus, je souscris à la suggestion de l'autre affiche, selon laquelle vous utilisez un rendu palettisé. Il est très difficile de faire des calculs rapides sur des pixels de 16 bits, mais plus rapidement en 8 bits si vous maîtrisez la manière dont vous présentez votre palette.

Quelques idées combinant de beaux graphismes et une mémoire insuffisante:

  • Stockez les arrière-plans et les images-objets en flash.
  • Stockez des graphiques générés dynamiquement dans la RAM en utilisant une palette contenant au moins la moitié des octets.
  • Utilisez la fonctionnalité de fenêtrage du pilote LCD pour mettre à jour uniquement la partie de l'écran requise.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top