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

C++ Discussion :

Récupérer l'événement de rafraîchissement de l'écran


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2009
    Messages : 39
    Points : 46
    Points
    46
    Par défaut Récupérer l'événement de rafraîchissement de l'écran
    Bonjour à tous!


    Je suis en train de développer une interface utilisateur et lors de son utilisation, je dois déplacer une form au-dessus d'une autre de manière fluide.

    Pour y arriver, je dois réussir à synchroniser le changement de position de cette form avec le rafraîchissement de l'écran (60 Hz). Pour le moment, j'ai un event timer qui se déclenche toutes les 17 millisecondes (58.8 Hz) mais à cause de cette légère différence, le battement est visible et la form "sursaute" à peu près chaque seconde.

    Existe-t-il un évenement windows ou autre qui permettrait de récupérer cette information?

    Petite précision, ce problème n'est pas un scintillement, de ce côté, c'est bon



    Merci beaucoup et bonne journée!

    Frédéric

  2. #2
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Ce que tu cherches à faire, c'est chopper le signal VBL (Vertical BLanking). Vu sa fréquence, tu peux oublier directement un message ou évènement Windows, c'est bien trop lent pour ça. Même sous DOS, on faisait en général une attente ACTIVE de ce signal pour avoir le temps de permuter les pages pendant le retour du faisceau !

    A mon avis, en dehors de couches graphiques dédiées comme DirectX, ce sera plus que difficile de le gérer... Et j'avoue que je serais curieux de voir comment cela se passerait sur une sortie 100% numérique (écran LCD en connection DVI) : le signal VBL est émulé pour la partie VGA ? Non généré ? Tu fais comment si l'écran utilisateur est à une fréquence différente de 60 Hz ? J'ai un cathodique qui tourne à 125 Hz, par exemple, et mon LCD est (physiquement) à 285 Hz vu son temps de rémanence (3.5 ms)...
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2009
    Messages : 39
    Points : 46
    Points
    46
    Par défaut
    Merci pour ta réponse Mac LAK, ça confirme mes craintes...

    Je vais essayer de voir si je peux changer le frame rate à 50 Hz afin d'avoir un timer à la même fréquence. Heureusement que cette application a un hardware dédié mais ça me plaît pas trop, j'aurais préféré une solution un peu plus propre.

    Je vais peut-être chercher du côté du HPET (high precision event timer) qui devrait me permettre d'approcher encore un peu plus les 60 Hz (période de 16.666...ms), mais je n'ai pas encore eu l'occasion de le connaître ce timer.

    Une autre solution serait d'intégrer DirectX que je n'ai jamais touché, je ne sais donc pas si c'est facile, difficile ou impossible...

  4. #4
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Ou de voir si jamais tu peux intégrer un driver bas niveau vers le circuit graphique... Du genre bypass, comme il en existe pour les ports I/O.

    Si tu es en embarqué (CE / XPE), tu as normalement la possibilité de créer n'importe quoi ou presque comme driver assez facilement, tu peux donc parfaitement implémenter un IOCTL qui attendrait la VBL...
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2009
    Messages : 39
    Points : 46
    Points
    46
    Par défaut
    Bon, finalement j'ai décidé d'installer les librairies DirectX et de récupérer le signal Vertical Blank. La synchronisation se fait très bien, mais faut juste faire attention que le rafraîchissement de la form ne prenne pas plus que 16 ms (60Hz) car sinon on rate la synchro...

    Merci Mac LAK pour tes suggestions et bonne journée à tous!


    Frédéric

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 02/08/2011, 18h36
  2. Réponses: 4
    Dernier message: 18/12/2007, 08h38
  3. [JACOB] récupérer les événements d'objet COM
    Par zlavock dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 12/05/2005, 14h07
  4. récupérer l'événement "fermeture par la croix" de
    Par hamurielle dans le forum Windows Forms
    Réponses: 4
    Dernier message: 08/04/2005, 11h35
  5. Récupérer un évènement du presse papier
    Par cedrolin dans le forum MFC
    Réponses: 2
    Dernier message: 27/07/2004, 00h03

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