IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

gif animé et performance d'écran


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Par défaut gif animé et performance d'écran
    Bonjour

    j'ai un programme awt qui déplace des gifs animés dans un Canvas.
    à ma grand surprise l'animation est excellente si je branche mon Mac portable sur un grand écran auxiliaire : le déplacement est fluide et le gif s'anime sans conflit avec les déplacements....
    et elle est mauvaise (ralentie , avec des sauts , des mouvements incomplets, ) si on utilise l'écran de ce même portable.

    explication? pourquoi l'écran importe sur la qualité?
    merci
    zut: je me rends compte que mon message est mal placé: il aurait du être dans le sous-forum graphique ... comment le déplacer?

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    synchronization verticale?

  3. #3
    Membre Expert
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Par défaut
    bon je suis arrivé à avoir une animation fluide dans tous les cas .... avec une différence étonnante:
    j'ai un bonhomme qui se déplace ne marchant et il marche deux fois plus lentement sur le petit écran que sur le grand écran ...
    Il y a toujours quelque chose qui m'échappe ... mais je vais essayer d'expliquer le pourquoi du comment.

    Pour une raison que je ne vais pas expliquer ici le programme est constitué d'objets graphiques gérés sur un Canvas.
    Chaque objet graphique contient une donnée à afficher (image, chaîne, Shape awt) plus un ensemble de données d'affichage qui lui sont propres.
    Parmi ces données d'affichage il y a des AffineTransform qui dirigent le dessin de la donnée à afficher.
    bon
    maintenant les gifs animés ont une sale habitude: pour les dessiner on a besoin d'un ImageObserver et ils déclenchent à chaque changement d'image élémentaire
    une repeinture du composant global.
    Du coup on a deux threads qui se disputent le dessin: celui qui change les emplacements de dessin et celui du gif
    du coup boxon total dans les opérations de dessin!

    donc il m'a fallu:
    - créer un ImageObserver spécial qui ne relance pas les repeintures globales du composant (mais qui repeint à sa manière l'image transformée)
    - mettre des synchronized au bon endroit pour avoir des opérations de peinture cohérentes

    tout ça est, bien sûr, particulièrement inefficient , mais ça marche. Je soupçonne qu'il doit y avoir des moyens moins exotiques de faire les choses ...mais pour l'instant je vais boire mon thé

    à bientôt

  4. #4
    Membre Expert
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Par défaut
    je cherche quand même à comprendre pourquoi mon animation marche 4 ou 5 fois plus lentement sur l'écran du portable que sur un écran déporté.
    Si je mets mon écran en recopie video alors ça se met à gazer sur les deux écrans (y compris sur celui du portable)
    Je suis d'une ignorance crasse en ce qui concerne les GPU ... quelqu'un peut m'expliquer pourquoi l'écran influe de manière aussi spectaculaire sur les performances?
    (un facteur de ralentissement est la présence de blocs synchronized pour s'assurer de la cohérence des dessins, par ailleurs je change les stratégies de bufferisation et ça n'a aucune influence ...)
    bref ma culture est trop faible pour essayer de démonter le problème.
    des suggestions?

    merci
    PS: je suis sur MAC

  5. #5
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    la question est peut être bête, mais quand ça rame, l'écran déporté est branché? Il fait quoi? Avec le GPu de portable tu as parfois un double GPU: un lent pour la bureautique et un rapide pour le graphisme, et la partie graphisme ne s'activant que quand des systèmes lancent la 3D ou que l'écran externe est requis. Tu pourrais regarder si tu n'a pas une option pour désactiver ça. Souvent la base perf c'est un GPU intel et les perfs rapide un GPU amd / nvidia

  6. #6
    Membre Expert
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    la question est peut être bête, mais quand ça rame, l'écran déporté est branché? Il fait quoi?
    appli sur écran portable mais sans écran déporté: lent
    appli sur écran portable mais écran déporté branché et affichant d'autres applis: lent
    appli sur écran portable avec recopie d'écran déporté: rapide
    appli sur écran déporté alors que le portable affiche autre chose: rapide

    par aileurs sur MAC pas trouvé moyen de faire joujou avec les GPUs ... mais je cherche
    en fait je m'inquiète surtout de ce qui va se passer le jour où des codes de cette bibliothèque tourneront sur un PC (Win**, ou Linux**)

Discussions similaires

  1. [FLASH MX 2004] Probleme de creation de GIF anime
    Par hedgehog dans le forum Flash
    Réponses: 5
    Dernier message: 13/03/2005, 19h07
  2. Vitesse d'un gif animé
    Par lucas-18 dans le forum Access
    Réponses: 1
    Dernier message: 25/10/2004, 08h29
  3. [MFC]afficher un gif animé
    Par Blo0d4x3 dans le forum MFC
    Réponses: 26
    Dernier message: 04/10/2004, 15h51
  4. Rx Controls Gif animés
    Par toufou dans le forum Composants VCL
    Réponses: 6
    Dernier message: 23/08/2002, 14h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo