--== DEVLYNX ==--

 
 
|
 
 
 
 
Accueil
News
Doc
Mémoire
Recrutement
Faq
Liens
Pseudo :

Mot de passe :


Pas de compte ?

S'inscrire...


Statistiques :

Documentation


Rootretour à l'arborescence des catégories » Documentation techniqueEnsemble des informations pouvant être utiles au développement » Lynx docRestranscription de la documentation d'origine » Annexe 4 : Moteur de sprites » Attendre la fin d'image et la fin de ligne
«««« ( /^\ ) »»»»
INFOS SUR LA CATEGORIE

Créée le : 2009-10-07 11:00:00
Par : vince





INFOS SUR LA PAGE

Titre : Attendre la fin d'image et la fin de ligne
Sous Titre :
Langue : FRA
Source : http://www.monlynx.de/lynx/sprite.html#_0e
Auteur : vince
Posté par : vince

Attendre la fin d'image et la fin de ligne

Souvent, vous allez vouloir faire quelque chose que vous ne devriez pas faire tant que la vidéo n'a pas fini de traiter la dernière ligne de l'affichage (ou le dernier pixel de la ligne courrante). Par exemple, vous pourriez vouloir changer la palette des couleurs à un moment où vous avez la garantie de ne pas pervertir l'affichage ou vous pourrez avoir fini tout ce dont vous aviez besoin pour l'affichage courrant et et vous voulez attendre jusqu'à être sûr que les cache d'affichage aient été permutés avant d'attaquer l'affichage suivant.

Le moment où le matériel de Handy a juste fini d'afficher les lignes du cache courrant est connu sous le nom de fin d'image (end of frame ou EOF). Quand le matériel débute l'affichage du cache suivant, on parle de début d'image. L'interval entre la fin et le début d'image est connu sous le nom de retraçage vertical qui correspond sur les affichage vidéos au temps nécessaire au faisceau d'électrons pour retourner en haut du tube cathodique. Handy n'a pas besoin d'un tel délai mais un pseudo retraçage vertical est quand même créé pour permettre aux développeurs de profiter du retraçage vertical pour effectuer des modifications sur le système. La même chose est vraie pour l'horizontal, il y a un délai connu sous le nom de fin de ligne (end of line ou EOL) et le matériel est paramétré pour créer un délai pour de retraçage horizontal.

Si vous comptez utiliser les macros EOF, vous devez définir la constante EOF_USER. Si vous comptez utiliser les macros EOL, vous devez définir la constante EO_L_USER. Si vous ne définissez pas ces constantes, les macros associées ne seront pas définies et le code les supportant ne sera pas inclus.

Avant d'utiliser les macros WAITEOF ou/et WAITEOL vous devez utiliser INITEOF ou/et INITEOL. Vous ne devriez les appelr qu'une seule fois, probablement durant le code d'initialisation de votre programme.

Pour attendre la fin d'image, utilise la macro WAITEOF. Pour attendre la fin d'une ligne, utilisez WAITEOL. Ces macros effacent respectivement les variables DISPLAY_EOFFLAG et DISPLAY_EOLFLAG du système DisplayFlags et ensuite maintient le CPU dans une boucle jusqu'à ce que la fin de ligne ou d'image intervienne (qui est détecté par le fait que le gestionnaire de fin d'image paramètre DISPLAY_EOFFLAG et que le gestionnaire de fin de ligne positionne DISPLAY_EOLFLAG).

WAITEOF (et WAITEOL) suppose que l'événement qui nous intéresse n'a pas encore eu lieu au moment de l'entrée dans la macro. Ca peut créer un problème : si votre code atteint l'appel à WAITEOF juste après une fin d'image, alors WAITEOF va vous faire attendre une image complète ce qui ne correspond probablement pas avec vos spécifications. Par chance, il existe une façon d'attendre la fin d'image si elle n'a pas eu lieu ou de continuer immédiatement si elle a déjà eu lieu. C'est possible en effaçant DISPLAY_EOFFLAG un peu plus tôt dans votre code et en appelant la macro WAITNEOF à la fin de votre algorithme. WAITNEOF est identique à WAITEOF sauf que le drapeau DISPLAY_EOFFLAG n'est pas effacé avant l'entrée dans la boucle d'attente. Ainsi, si le gestionnaire de fin d'image a déjà eu lieu et qu'il a positionnné DISPLAY_EOFFLAG au moment où votre code atteint le WAITNEOF, alors votre code va le détecter est sortir immédiatement de la boucle. Le problème avec cette technique est que si votre code entre les affichages dure trop longtemps vous pouvez vous retrouver avec de graves problème de surcouches si vous ne faites pas attention.

La macto WAITNEOL est analogue à WAITNEOF mais pour l'horizontal.

(Source : http://www.monlynx.de/lynx/sprite.html#_0e)
«««« ( /^\ ) »»»»

générée en 33 ms
-= DevLynx, un site par vince pour vous =-