Afficher par dessu TOUT!

elfelf Membre
00:37 modifié dans API AppKit #1
Hello,

J'aimerai dessiner un rond vert (un bezierpath) sur l'écran. Mais le truc, c'est que je veux l'afficher par dessu tout le reste. Par dessu des jeux qui se mettent en fullscreen.

Est-ce que quelqu'un saurrais comment faire?

Merci,
Kenneth

Réponses

  • BruBru Membre
    00:37 modifié #2
    Teste en créant une fenêtre transparente recouvrant l'écran entier. Cette fenêtre doit avoir un niveau (setLevel:) à  CGShieldingWindowLevel + 1 pour qu'elle soit au dessus de la fenêtre "plein écran".

    Mais je ne sais pas si ça marchera avec 100% des applis plein-écran...

    .
  • schlumschlum Membre
    00:37 modifié #3
    Je doute que ça fonctionne avec les les applis full screen autres que Cocoa, parce qu'il me semble qu'en OpenGL la capture du plein écran est faite à  un niveau au dessus de Cocoa.
  • BruBru Membre
    septembre 2007 modifié #4
    dans 1190761140:

    Je doute que ça fonctionne avec les les applis full screen autres que Cocoa, parce qu'il me semble qu'en OpenGL la capture du plein écran est faite à  un niveau au dessus de Cocoa.


    L'affichage des fenêtres est de la responsabilité du window-server... Rien avoir avec cocoa.
    NSWindow n'est jamais qu'une fenêtre du window-server dans laquelle ensuite les "fioritures" sont dessinées (excepté pour NSBorderlessWindow qui correspond à  une fenêtre window-server presque pure).

    Les contextes OpenGL s'affichent dans une fenêtre "standard" (du point de vue window-server) dont le niveau est CGShieldingWindowLevel.

    Les limitations seraient plus au niveau de la carte graphique, notamment en accédant directement au buffer vidéo pour l'affichage.

    .
  • schlumschlum Membre
    00:37 modifié #5
    Je ne parlais pas de contexte OpenGL, mais d'applis OpenGL ou SDL pures avec "glutFullScreen" par exemple...
    Mais apparemment ça ne capture pas l'écran directement effectivement (ça ne bloque pas exposé).
  • schlumschlum Membre
    00:37 modifié #6
    Quand on fait un "CGCaptureAllDisplays();", il se passe quoi ?
    Parce que je doute qu'après ça une autre appli puisse afficher quoi que ça soit au dessus...
  • elfelf Membre
    00:37 modifié #7
    dans 1190765636:

    Je ne parlais pas de contexte OpenGL, mais d'applis OpenGL ou SDL pures avec "glutFullScreen" par exemple...
    Mais apparemment ça ne capture pas l'écran directement effectivement (ça ne bloque pas exposé).


    Bah le problème est que en fait, si, ça bloque exposé, et tout le reste avec certains jeux (Warcraft 3, Unreal Tournament 2004) alors que d'autre ne bloquent pas (Halo, Black & White 2).

    Mais le truc, c'est que j'aimerai afficher une petite orbe verte par dessu ceux qui bloquent (Unreal).

    Je suppose que il faudrais tripoter avec le buffer de la carte graphique, comme tu le dit, Bru. Le truc, c'est de trouver un affichage plus bas-niveau que celui du jeu, histoire de pouvoir y implanter mon element.

    J'espère que ça vous dérenge pas si je cross-poste sur la mailing list d'Apple, je vous tirenderai ou courrent de leur réponses?
  • elfelf Membre
    00:37 modifié #8
    Il semblerais que personne ne saurrait comment faire, même sur #macdev. :(

    C'est assez ennuiant, mais je pense que je serrais obliger de trouver une solution alternative. A moins que l'un de vous aie une idée de génie.

    (En fait, mon but c'est d'afficher de l'information supplémentaire par dessu des jeux, entre autre, l'êtat de TeamSpeex)
Connectez-vous ou Inscrivez-vous pour répondre.