Je me demande si je pourrais attraper l'événement vsync écran par n'importe quel descripteur de fichier et [sélectionnez | sondage | l'épouser.GLX événement Vsync
Normalement, si je ne me trompe pas, glXSwapBuffers() ne bloque pas le processus pour que je puisse faire quelque chose comme:
int init() {
create epollfd;
add Xconnection number to it;
add some other fd like socket timer tty etc...
possibly add a vsync fd like dri/card0 or fb0 or other???
return epollfd;
}
main() {
int run = 1;
int epollfd = init();
while(run) {
epoll_wait(epollfd, ...) {
if(trigedfd = socket) {
do network computing;
}
if(trigedfd = timer) {
do physics computing;
}
if(trigedfd = tty) {
do electronic communications;
}
if(trigedfd = Xconnection number) {
switch(Xevent) {
case key event:
do key computing;
case mouse event:
do mouse computing;
case vsync???:
do GL computings;
glXSwapBuffers();
}
}
if(trigedfd = dri/card0 or fb0 or other???) {
do GL computings;
glXSwapBuffers();
}
}
}
Je pourrais alors je pourrais trig tout état de cause quel que soit lorsque l'événement se produit et vsync évitez en même temps l'effet de déchirure dans le cas où j'utilise uniquement la fonction de dessin X et éventuellement GL pour vsync.
Est-ce que libdrm pouvait m'aider? la question plus générale est:
Alors, quel fd dois-je utiliser pour attraper l'événement vsync et comment faire en sorte que shur sur ce fd que l'événement qui s'est passé est un événement vsync?
Notez que je veux le rendre monothreaded. Je pourrais faire un processus séparé qui agit comme un serveur auquel je pourrais me connecter et envoyer une requête "réveille-moi quand vsync s'est passé", ce processus pourrait bloquer un glfinish et ensuite envoyer quelque chose via une socket ou pipe ou autre, je le ferais évitez-le aussi. –
Pourquoi voulez-vous exactement cela? Serait-ce un cas de [le problème XY] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)? – davmac
Je crée ma propre bibliothèque/API, je veux avoir un seul point de synchronisation pour tous les événements d'un processus. –