Comprendre les routines
graphiques de base
Vous etes maintenant prêt à afficher quelquechose
à l'écran. Même si vous plannifiés d'utiliser pleins
de sprites pour votre jeu, vous trouverez bientôt les routines graphiquesrès
efficace
et très utile rien que par le fait qu'elles n'utilisent que très
peu de ressource mémoire.
Dans ce document 3 fonctions vont vous etes présentées
:
GsLINE ( lignes )
GsGLINE ( lignes avec options avancées )
GsBOXF ( rectangle plein )
Tout d'abord rappelons que pour afficher à l'écran nous
avons besoin d'une table d'ordennancement ( T.O.). Aussi on peut assimiler une
T.O. à une donnée contenant toutes les routines
graphiques que l'on veut utiliser. A chaque nouvelle image nous insérons
dans les T.O. les routines graphiques utilisées. Puis quand les 2 buffers
permtutent, les routines graphqiues sont
exécutées sur le buffer off-screen pour etre afficher à
la prochaine permutation.
GsLINE, GsGLINE, GsSortBoxFill
La création et l'insertion dans les
T.O. sont assez simple à implémenter. Déjà nous
créons une structure de la forme que l'on veut affciher. Puis on remplit
les champs par les valeurs désirées. Ainsi pour une diagonale
bleue, nous faisons :
GsLINE
aline;
aline.attribute
= 0;
aline.x0 = aline.y0 = 50;
aline.x1
= aline.y1 = 100;
aline.r = aline. g = 0; aline.b = 255;
Les fonctions pour insérer les routines graphiques primaires dans
les T.O. commencent tous par le préfix GsSort....Aussi rappelez vous
que nos T.O. contiennent un nombre de plans (ou rofondeurs ) dépendant
de la longueur de la T.O. (OTLength). Le plan 0 est le plan le plus proche de
l'écran, allant jusqu'au plan 2^OTLength-1 qui représente le plan
le plus loin de l'écran. Pour insérer dans le plan 0, nous faisons
:
GsSortLine(&aline, &ordering_table,0)
Et ca y est! Quand la commande GsDrawOt est appelée, la ligne
apparaitra sur l'écran.
Le champ attribut détermine peu de choses mais a quand même son
importance :
-
Le choix d'une semi-transparence
- Le type de la semi-transparence si il y en a une
- L'affichage
ou non de votre forme
(voir le manuel des librairies pour plus de détails )
WorkBase
Afin que les routines graphiques soient exécutées, il faut disposer
d'espace mémoire. Cet espace mémoire se nomme "GpuPacketArea"
mais peut varier en fonction du choix du pogrammeur dans la variable.
Gpu : signifie Graphics Process Units. C'est le composant qui gère
l'exécution des routines graphiques pour vous permettre de voir de jolies
choses sur l'écran.
Packet : correspond à l'unité de nos routines graphiques.
Une routine graphique peut etre de taille maximum de 24 unités. Pour
savoir combien l'unité de votre routine graphique vaut il suffit de faire
un sizeof() sur la structure qui a été inséré.
Area : Endroit, place.
Ainsi avant d'insérer une routine graphique dans notre T.O. nous devrons
indiquer au GPU ou se trouve l'emplacement mémoire de travail. Nous le
faisons grace a cette ligne de commande :
GsSetWorkBase((PACKET*)GpuPacketArea[buffer]
)
Nous devons en avoir une pour chaque buffer afin d'éviter les conflits.
Nous pouvons alors nous poser la question de Quelle taille devons nous faire
nos GpuPacketArea ?
Quequefois vous verrez PACKET gpuPktArea[2][8192].
ou
PACKET
gpuPktArea[2][MAX_OBJ * 24].
Bien sur cela depend du nombre de primitives que vous utilisez. Le chiffre exact
est le nombre de primitives dans chaque image que vous insérez dans les
T.O. * le nombre d'unités (Packets) que chacune requiert. La plupart
des programmeurs déclarent juste plus d'espace qu'il ne leur en faut.
Si vous déclarez votre taille statiquement ( c.a.d par ex. [8192] ) soyez
sur que l espace mémoire alloué soit au moins égale à
la taille nécessaire pour générer l'image.
Problèmes
Vous pouvez peut-etre trouver que ces lignes, ces rectangles pleins ne suffisent
pas à la réalisation de votre jeu. Cercles, triangles, ect, seraient
les bienvenus, mais malheureusement ils nécessitent plus de calcul de
la part du CPU. Pour répondre à ce problème, la méthode
la plus efficace est d'utiliser les sprites. Bien sur les sprites requierent
plus de mémoire mais les routines graphiques ont été optimisées
pour leur utilisation.
Autre petit problème si vous mettez [1023] comme taille d'espace mémoire
lorsque l'image sera affichée alors votre écran se figera. Cette
valeur est donc à éviter.
Le code source illustrant les capacités des routines graphiques primaires
de la Yaroze est disponible ici (primaire.zip) .
Ce fichier source utilise les fichiers des conttrolleurs que vous pouvez télécharger
sur la page controlleur..
retour
à l'index