Documentation de la bibliothèque MLV-2.0.2

Foire Aux Questions

Lorsque j'exécute mon programme, j'obtiens l'erreur : "Error detected by the function MLV_create_window() in LibMLV : The MLV library has yet been initialised". Que dois-je faire ? :

Cette erreur apparaît quand on essaye de créer deux fois une fenêtre.

Si vous vouliez créer 2 fenêtres avec MLV. Alors, il n'y a pas de solutions à votre problème car MLV a été prévue pour ne créer qu'une et qu'une seule fenêtre. Il s'agit d'un choix délibéré pour simplifier l'utilisation de la bibliothèque.

Si vous vouliez créer qu'une seule fenêtre, alors vous devez supprimer les appels à MLV_create_windows() jusqu'à ne plus avoir qu'un seul appel.

Pourquoi y-a-t-il une latence entre le moment ou j'utilise le calvier et la souris, et le moment ou l'evènement est réèlement traité. Est-ce normal ? :

Il s'agit surement d'une mauvaise gestion des évènements de votre part.

Cette latence provient du fait que vous mettez à jour les données de votre programme ainsi que l'affichage à chaque fois que vous recevez un évènement.

Il ne faut pas !

En effet, mettre à jour l'affichage ou recalculer les données de votre application sont des opérations qui coûtent beaucoup de temps processeur. Comme l'ordinateur récupère beaucoup d'évènements (comme quand la souris bouge), il n'arrive plus à suivre la cadence et une latence apparaît.

La bonne façon de procéder, est de commencer par récuperer l'ensemble de tous les évènements qui ont étés générés depuis le dernier affichage, puis de mettre à jour les données du programme et enfin de de faire l'affichage.

Voilà à quoi devrait ressembler une application qui gére correctement les évènements:

struct Data {
...
};
void init_data( Data * data ){
...
}
int end_of_program( Data* data ){
...
}
void update_events( Data* data ){
MLV_Event event;
do {
event = MLV_get_event( ... );
switch( event ){
case MLV_KEY :
...
}
}while( event != MLV_NONE );
}
void update_data( Data* data ){
...
}
void update_display( Data* data ){
...
}
int main(){
Data data;
init_data( &data );
while( ! end_of_program( &data ) ){
update_events( &data );
update_data( &data );
update_display( &data );
}
}

Mon ordinateur se met à surchauffer quand j'éxécute mon programme. Que faut-il faire ? :

Vous devez mettre votre programme en sommeil. Pour cela vous devez utiliser la fonction : MLV_delay_according_to_frame_rate().

Voici un exemple de programme qui se met en sommeil périodiquement :

int main(){
while( ! end_of_program( ... ) ){
...
}
}

La fonction va suspendre l'exécution du programme et la reprendre un peux plus tard, de sorte que la boucle soit éxécutée 100 fois par seconde.